2012-03-17 24 views
0

在發佈這個問題之前,我沒有檢查那些關於無限畫廊的帖子,但它沒有爲我工作。畫廊保持原樣。這段代碼:gallery.setSelection((int)(Integer.MAX_VALUE/2) - (Integer.MAX_VALUE/2)% mImageIds.length);甚至不會影響畫廊。此外,我只是寫7而不是mImageIds.length,因爲我的圖庫包含7個項目,而不是在onCreate本身中定義圖庫項目,而只是獲取setSelection()聲明的長度。但LogCat開始顯示ArrayIndexOutOfBounds Exception。那麼我有什麼選擇?我做了每個人都會做的事情。我刪除了7,並將代碼解開,直到它運行正常。但是,再次,LogCat沒有出現這個錯誤。它確實令人沮喪。請幫忙。無限無盡的畫廊?那麼,它不適合我

如果有人可以幫助無盡的畫廊,這將是一個很大的幫助。

感謝您的期待。

logcat的:

03-17 18:46:09.681:d/android.widget.GridLayout(626):水平約束條件:X7 - X0> 320,X 4 - X 3> 87,X 5 - X4> 0 ,x6 - x5> 77,x4 - x2 < 64,x4 - x3 < 64,x2 - x1 < 64,x1 - x0 < 64不一致;永久刪除:x7 - x0 < 320,x4 - x2 < 64,x4 - x3 < 64. 03-17 18:46:09.691:D/android.widget.GridLayout(626):vertical constraints:y1 - y0> 21 ,y2-y1> 45,y3-y2> 42,y4-y3> 40,y5-y4> 10,y6-y5> 48,y7-y6> 0,y8-y7> 48,y9-y8> 0,y10 -y9> 48,y11-y10> 0,y12-y11> 44,y12-y10> 48,y13-y12> 82,y13-y0 < 199,y12-y11 < 44不一致;永久刪除:y13 - y0 < 199. 03-17 18:46:09.751:D/AndroidRuntime(626):關閉VM 03-17 18:46:09.751:W/dalvikvm(626):threadid = 1:線程退出與未捕獲的異常(組= 0x409c01f8) 03-17 18:46:09.771:E/AndroidRuntime(626):致命例外:主 03-17 18:46:09.771: E/AndroidRuntime(626): java.lang.ArrayIndexOutOfBoundsException: length=7; index=1073741823 03-17 18:46:09.771:E/AndroidRuntime(626)在com.sanjay.frames.FramesActivity $ ImageAdapter.getView(FramesActivity.java:86) 03-17 18:46:09.771:E/AndroidRuntime(626):在android.widget.Gallery.makeAndAddView(Gallery.java:844 ) 03-17 18:46:09.771:E/AndroidRuntime(626):at android.widget.Gallery.layout(Gallery.java:645) 03-17 18:46:09.771:E/AndroidRuntime(626)在android.widget.Gallery.onLayout(Gallery.java:346) 03-17 18:46:09.771:E/AndroidRuntime(626):at android.view.View.layout(View.java:11278) 03-17 18:46:09.771:E/AndroidRuntime(626):at android.view.ViewGroup.layout(ViewGroup.java:4224) 03-17 18:46:09.771:E/AndroidRuntime(626):at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1628) 03-17 18:46:09.771:E/AndroidRuntime(626):在android.widget.LinearLayout.layoutVertical(LinearLayout.java:1486) 03-17 18:46:09.771:E/AndroidRuntime(626):在android.widget。 LinearLayout.onLayout(LinearLayout.java:1399) 03-17 18:46:09.771:E/AndroidRuntime(626):at android.view.View.layout(View.java:11278) 03-17 18:46: 09.771:E/AndroidRuntime(626):在android.view.ViewGroup.layout(ViewGroup.java:4224) 03-17 18:46:09.771:E/AndroidRuntime(626):at a ndroid.widget.FrameLayout.onLayout(FrameLayout.java:431) 03-17 18:46:09.771:E/AndroidRuntime(626):at android.view.View.layout(View.java:11278) 03-17 18:46:09.771:E/AndroidRuntime(626):在android.view.ViewGroup.layout(ViewGroup.java:4224) 03-17 18:46:09.771:E/AndroidRuntime(626):在android.widget。 LinearLayout.setChildFrame(LinearLayout.java:1628) 03-17 18:46:09.771:E/AndroidRuntime(626):在android.widget.LinearLayout。layoutVertical(LinearLayout.java:1486) 03-17 18:46:09.771:E/AndroidRuntime(626):at android.widget.LinearLayout.onLayout(LinearLayout.java:1399) 03-17 18:46:09.771: E/AndroidRuntime(626):在android.view.View.layout(View.java:11278) 03-17 18:46:09.771:E/AndroidRuntime(626):在android.view.ViewGroup.layout(ViewGroup。 java:4224) 03-17 18:46:09.771:E/AndroidRuntime(626):at android.widget.FrameLayout.onLayout(FrameLayout.java:431) 03-17 18:46:09.771:E/AndroidRuntime 626):at android.view.View.layout(View.java:11278) 03-17 18:46:09.771:E/AndroidRuntime(626):at android.view.ViewGroup.layout(ViewGroup.java:4224) 03-17 18:46:09.771:E/AndroidRuntime(626):at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1489) 03-17 18:4 6:09.771:E/AndroidRuntime(626):在android.view.ViewRootImpl.handleMessage(ViewRootImpl.java:2442) 03-17 18:46:09.771:E/AndroidRuntime(626):在android.os.Handler。 dispatchMessage(Handler.java:99) 03-17 18:46:09.771:E/AndroidRuntime(626):at android.os.Looper.loop(Looper.java:137) 03-17 18:46:09.771: E/AndroidRuntime(626):at android.app.ActivityThread.main(ActivityThread.java:4424) 03-17 18:46:09.771:E/AndroidRuntime(626):at java.lang.reflect.Method.invokeNative Native Method) 03-17 18:46:09.771:E/AndroidRuntime(626):at java.lang.reflect.Method.invoke(Method.java:511) 03-17 18:46:09.771:E/AndroidRuntime (626):at com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:784) 03-17 18:46:09.771:E/AndroidRuntime(626):at com.android.internal.o s.ZygoteInit.main(ZygoteInit.java:551) 03-17 18:46:09.771:E/AndroidRuntime(626):在dalvik.system.NativeStart.main(本機方法)

下面是代碼我畫廊:

public class FramesActivity extends Activity { 
/** Called when the activity is first created. */ 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 
    DisplayMetrics metrics=new DisplayMetrics(); 
    getWindowManager().getDefaultDisplay().getMetrics(metrics); 
    Gallery gallery = (Gallery) findViewById(R.id.gallery); 
    Integer[] mImageIds = { 
      R.drawable.ic_launcher, 
      R.drawable.ic_menu_template, 
      R.drawable.th, 
      R.drawable.wt, 
      R.drawable.cur, 
      R.drawable.ic_launcher, 
      R.drawable.ic_launcher 
    };  

    gallery.setAdapter(new ImageAdapter(this)); 
    gallery.setSelection((int)(Integer.MAX_VALUE/2) - (Integer.MAX_VALUE/2)%  mImageIds.length); 

    gallery.setOnItemClickListener(new OnItemClickListener() { 
     public void onItemClick(AdapterView parent, View v, int position, long id) { 
      EditText editText2=(EditText) findViewById(R.id.editText2); 
      editText2.setText(""+position); 
     } 
    }); 
} 
public class ImageAdapter extends BaseAdapter { 
    int mGalleryItemBackground; 
    private Context mContext; 

    private Integer[] mImageIds = { 
      R.drawable.ic_launcher, 
      R.drawable.ic_menu_template, 
      R.drawable.th, 
      R.drawable.wt, 
      R.drawable.cur, 
      R.drawable.ic_launcher, 
      R.drawable.ic_launcher 
    }; 

    public ImageAdapter(Context c) { 
     mContext = c; 
     TypedArray attr = mContext.obtainStyledAttributes(R.styleable.Frames); 
     mGalleryItemBackground = attr.getResourceId(
       R.styleable.Frames_android_galleryItemBackground, 0); 
     attr.recycle(); 
    } 

    public int getCount() { 
     return mImageIds.length; 
    } 

    public Object getItem(int position) { 
     return position; 
    } 

    public long getItemId(int position) { 
     return position; 
    } 

    public View getView(int position, View convertView, ViewGroup parent) { 
     ImageView imageView = new ImageView(mContext); 

     imageView.setImageResource(mImageIds[position]); 
     imageView.setLayoutParams(new Gallery.LayoutParams(150, 100)); 
     imageView.setScaleType(ImageView.ScaleType.FIT_XY); 
     imageView.setBackgroundResource(mGalleryItemBackground); 

     return imageView; 
    } 
} 
} 

另外,我在android系統development.So一個新手,如果你看到上面的代碼中任何其他錯誤,不介意指着他們。

+0

順便說一句,畫廊工作正常,如果我只是刪除'setSelection()'語句。 – Exorcist 2012-03-17 13:33:22

回答

2

你應該列表傳遞給您的適配器像這樣(或使用ArrayAdapter):

public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 
    DisplayMetrics metrics=new DisplayMetrics(); 
    getWindowManager().getDefaultDisplay().getMetrics(metrics); 
    Gallery gallery = (Gallery) findViewById(R.id.gallery); 
    Integer[] mImageIds = { 
      R.drawable.ic_launcher, 
      R.drawable.ic_menu_template, 
      R.drawable.th, 
      R.drawable.wt, 
      R.drawable.cur, 
      R.drawable.ic_launcher, 
      R.drawable.ic_launcher 
    };  

    gallery.setAdapter(new ImageAdapter(this, mImageIds)); 
    gallery.setSelection((int)(Integer.MAX_VALUE/2) - (Integer.MAX_VALUE/2)%  mImageIds.length); 

    gallery.setOnItemClickListener(new OnItemClickListener() { 
     public void onItemClick(AdapterView parent, View v, int position, long id) { 
      EditText editText2=(EditText) findViewById(R.id.editText2); 
      editText2.setText(""+position); 
     } 
    }); 
} 
public class ImageAdapter extends BaseAdapter { 
    int mGalleryItemBackground; 
    private Context mContext; 

    private Integer[] mImageIds = null; 

    public ImageAdapter(Context c, Integer[] imageIds) { 
     mContext = c; 
     mImageIds = imageIds; 
     TypedArray attr = mContext.obtainStyledAttributes(R.styleable.Frames); 
     mGalleryItemBackground = attr.getResourceId(
       R.styleable.Frames_android_galleryItemBackground, 0); 
     attr.recycle(); 
    } 

    public int getCount() { 
     return (mImageIds != null) ? mImageIds.length : 0; 
    } 
// etc 

如果這不是幫助從後日志錯誤,並強調它發生在哪裏就行了。

編輯:

gallery.setSelection((int)(Integer.MAX_VALUE/2) - (Integer.MAX_VALUE/2)%  mImageIds.length); 

導致錯誤。 (2000/2) - (2000/2)%7 = 1000 - 1000%7 = 1000 - (1000%7)= 1000 - 6 =方式太大。

的結果必須是0..6如果mImageIds.size == 7

什麼應該那行嗎?

+0

沒有,也沒有工作。這裏是從日誌錯誤:'03-17 18:34:16.192:E/AndroidRuntime(587):java.lang.ArrayIndexOutOfBoundsException:length = 7; index = 1073741823 ' – Exorcist 2012-03-17 13:06:22

+0

編輯自己的帖子,把完整的錯誤放在那裏,最上面一行說(YouJavaFile.java:345)是錯誤發生的地方。在你的文章中突出顯示該行。 – zapl 2012-03-17 13:08:16

+0

btw「index = 1073741823」表示您訪問mImageIds [1073741823],因此您使用Integer.MAX_VALUE進行計算是錯誤的。 – zapl 2012-03-17 13:10:09