2012-03-17 18 views
0

私はこの質問を投稿する前に無限のギャラリーについてのそれらの記事をチェックしましたが、それは私のために働かなかった。ギャラリーはそれなりに残っていた。このコードは、gallery.setSelection((int)(Integer.MAX_VALUE/2) - (Integer.MAX_VALUE/2)% mImageIds.length);でも少しでもギャラリーには影響しません。私のギャラリーは7つの項目が含まれているためといただきました!より多くの、だけではなく、上記setSelection()文の長さを取得するためonCreate自体にギャラリー項目を定義するのは、私はちょうど7の代わりmImageIds.lengthを書きました。しかし、LogCatArrayIndexOutOfBounds Exceptionと表示され始めました。だから私はどのような選択肢がありましたか?私は誰もがやることをしました。私はその7を削除し、それがうまく動作していたポイントまでコードを元に戻しました。しかし、再び、LogCatはそのエラーから出てこなかった。それは本当に欲求不満です。助けてください。無限エンドレスギャラリー?まあ、それは私のために働いていません

エンドレスギャラリーで誰かが助けてくれると助かります。

ありがとうございます。

LogCat:

3月17日18:46:09.681:D/android.widget.GridLayout(626):水平制約:X7 - X0> 320、X4 - X3> 87、X5 - 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):垂直方向の制約:y1 - y0> 21 y4-y3> 40、y5-y4> 10、y6-y5> 48、y7-y6> 0、y8-y7> 48、y9-y8> 0、y10 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):android.widget.Gallery.layout(Gallery.java:645) 03-17 18:46:09.771:E/AndroidRuntime(626): android.widget.Gallery.onLayout(Gallery.java:346) 3月17日18:46:09.771:E/AndroidRuntime(626):android.view.View.layout(View.java:11278)で 3月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):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 AndroidLuntime(626):android.view.View.layout(View.java:11278) 03-17 18:46:09.771: 18:46:09.771:E/AndroidRuntime(626):android.view.ViewGroup.layoutで(ViewGroup.java:4224) 3月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。(LinearLayout.java:1386) 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。ジャワ:4224) 3月17日18:46:09.771:E/AndroidRuntime(626):46:09.771:E/AndroidRuntime(android.widget.FrameLayout.onLayout(FrameLayout.java:431) 3月17日18時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):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。ディスパッチメッセージ(Handler.java:99) 03-17 18:46:09.771:E/AndroidRuntime(626):android.os.Looper.loop(Looper.java:137) 03-17 18:46:09.771: E/AndroidRuntime(626):android.app.ActivityThread.main(ActivityThread.java:4424) 03-17 18:46:09.771:E/AndroidRuntime(626):java.lang.reflect.Method.invokeNativeでネイティブメソッド) 03-17 18:46:09.771:E/AndroidRuntime(626):java.lang.reflect.Method.invoke(Method.java:511) 03-17 18:46:09.771:E/AndroidRuntime (626):com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:784) 03-17 18:46:09.771:E/AndroidRuntime(626):com.android.internal.o s.ZygoteInit.main(ZygoteInit.java:551) 3月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; 
    } 
} 
} 

はまた、私はあなたが上記のコード内の他の間違いを見れば、それらを指摘気にしないアンドロイドdevelopment.Soに初心者です。

+0

私はちょうど 'setSelection()'ステートメントを削除すると、ギャラリーは正常に動作します。 – Exorcist

答えて

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)%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

+0

あなた自身の投稿を編集して、そこに完全なエラーを置き、(YouJavaFile.java:345)という最上行にエラーが発生する場所があります。あなたの記事のその行を強調表示します。 – zapl

+0

btw "index = 1073741823"はmImageIds [1073741823]にアクセスして、「Integer.MAX_VALUE」での計算が間違っていることを意味します。 – zapl

関連する問題