-1

とにかくGridViewでランダムな画像があるのだろうかと思った

以下のコードは私にとってはうまく機能していますが、アクティビティを開始するときに GridView の画像がランダムではありません。

ランダムにするために以下のコードを変更する必要がありますか?

レイアウト:

<GridView
        android:id="@+id/fruit_gridview"
        android:layout_width="wrap_content" 
        android:layout_height="fill_parent"
        android:columnWidth="90dp"
        android:numColumns="auto_fit"
        android:verticalSpacing="5dp"
        android:horizontalSpacing="10dp"
        android:stretchMode="columnWidth"
        android:gravity="center"
        android:smoothScrollbar="true" />
</RelativeLayout>

イメージ アダプター:

// create a new ImageView for each item referenced by the Adapter
public View getView(int position, View convertView, ViewGroup parent) {
    ImageView imageView;
    if (convertView == null) {  // if it's not recycled, initialize some attributes
        imageView = new ImageView(mContext);
        imageView.setLayoutParams(new GridView.LayoutParams(85, 85));
        imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
        imageView.setPadding(8, 8, 8, 8);
    } else {
        imageView = (ImageView) convertView;
    }

    imageView.setImageResource(mThumbIds[position]);
    return imageView;
}

// references to our images
public Integer[] mThumbIds = {
        R.drawable.apple, R.drawable.apricot,
        R.drawable.banana, R.drawable.bell,
        R.drawable.blueberries, R.drawable.broccoli,
        R.drawable.carrot, R.drawable.celery,
        R.drawable.cherry, R.drawable.chili,
        R.drawable.coconut, R.drawable.dragon_fruit,
        R.drawable.durian, R.drawable.eggplant,
        R.drawable.erdnuss, R.drawable.grape,
        R.drawable.guava, R.drawable.kiwi,
        R.drawable.lettuce, R.drawable.lychee,
        R.drawable.mango, R.drawable.mangosteen,
        R.drawable.passion, R.drawable.mengkudu,
        R.drawable.mushroom, R.drawable.onion,
        R.drawable.orange, R.drawable.pear,
        R.drawable.pineapple, R.drawable.pomegranate,
        R.drawable.potato, R.drawable.pumpkin,
        R.drawable.radish, R.drawable.strawberry,
        R.drawable.tomato, R.drawable.watermelon
};

GridView アクティビティ:

GridView gridview = (GridView) findViewById(R.id.fruit_gridview);
    gridview.setAdapter(new ImageAdapter_Fruit_24(this));

    final ImageAdapter_Fruit_24 imageAdapter = new ImageAdapter_Fruit_24(this);

ありがとうございます!

4

1 に答える 1

2

アダプタに表示または渡す前に、次のコードを試してください。

// Fisher–Yates shuffle
static void shuffleArray(Integer[] intArr) {
    Random rnd = new Random();
    for (int i = intArr.length - 1; i >= 0; i--) {
        int index = rnd.nextInt(i + 1);
        // Simple swap
        int temp = intArr[index];
        intArr[index] = intArr[i];
        intArr[i] = temp;
    }
}

ArraryList<Integer>またはに変換することもできますListCollectionsには独自のメソッドがありshuffleます。

List list = Arrays.asList( solutionArray );
Collections.shuffle(list);

編集

に変換Integer[]ArrayListます。

ArrayList<Integer> arrList = new ArrayList<Integer>();
for(int i = 1 ; i < intArr.length ; i++)
{
    arrList.add(intArr[i]);
}
Collections.shuffle(arrList);

を使用するarrListには、arrList.get(position)メソッドを使用します。

私はあなたのような整数配列をすべて持っています。私は途中で実装しました。

Log.d("Home","Before Shuffle");
    for(int i=0;i< mThumbIds.length;i++){
        Log.i("Home",""+mThumbIds[i]);
}

出力は次のようになります。(出力と比較しないでください。リソース ID は異なる場合があります)

06-19 12:49:53.489: 情報/ホーム(2627): 2130837504
06-19 12:49:53.489: 情報/ホーム(2627): 2130837505
06-19 12:49:53.489: 情報/ホーム(2627): 2130837508
06-19 12:49:53.489: 情報/ホーム (2627): 2130837507
06-19 12:49:53.489: 情報/ホーム (2627): 2130837506
06-19 12:49:53.489: 情報/ホーム (2627) : 2130837509
06-19 12:49:53.489: 情報/ホーム (2627): 2130837510
06-19 12:49:53.489: 情報/ホーム (2627): 2130837511

これを に変換しInteger[]ましたArrayList<Integer>

ArrayList<Integer> list = new ArrayList<Integer>();
for(int i=0;i< mThumbIds.length;i++){
    list.add(mThumbIds[i]);
}

次に、リストをシャッフルして印刷します。

Collections.shuffle(list);
for(int i=0;i< list.size();i++){
    Log.i("Home",""+list.get(i));
}

出力。(コードを実行するたびに、出力は異なります。したがって、前のものと比較しないでください。)

06-19 12:49:53.489: 情報/ホーム(2627): 2130837511
06-19 12:49:53.489: 情報/ホーム(2627): 2130837504
06-19 12:49:53.489: 情報/ホーム(2627): 2130837506
06-19 12:49:53.489: 情報/ホーム (2627): 2130837508
06-19 12:49:53.489: 情報/ホーム (2627): 2130837510
06-19 12:49:53.489: 情報/ホーム (2627) : 2130837505
06-19 12:49:53.489: 情報/ホーム (2627): 2130837507
06-19 12:49:53.489: 情報/ホーム (2627): 2130837509

リストの順序を確認できます。その前とは違う。コードで使用します。

GridView gridview = (GridView) findViewById(R.id.fruit_gridview);
//do shuffle of list. make sure you have write above code before this
Collections.shuffle(list);
ImageAdapter_Fruit_24 imageAdapter = new ImageAdapter_Fruit_24(this);
gridview.setAdapter(imageAdapter);

あなたのgetView()

// create a new ImageView for each item referenced by the Adapter
public View getView(int position, View convertView, ViewGroup parent) {
    ImageView imageView;
    if (convertView == null) {  // if it's not recycled, initialize some attributes
        imageView = new ImageView(mContext);
        imageView.setLayoutParams(new GridView.LayoutParams(85, 85));
        imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
        imageView.setPadding(8, 8, 8, 8);
    } else {
        imageView = (ImageView) convertView;
    }
    //here changes will be done
    imageView.setImageResource(list.get(position));
    return imageView;
}
于 2013-06-19T06:07:10.323 に答える