2013-06-19 130 views
-1

我難怪有反正隨機圖像中的GridView隨機圖像中的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); 

謝謝你!

+0

是不是你的問題解決? –

+0

不,還是解決不了。 – user1731690

+0

好的。是否有可能用'ArrayList'替換Integer []?兩者具有相同的功能。如果你想做的話,我有其他解決方案。通過使用數組,您可以通過get(position)方法獲取任何值。 –

回答

2

在顯示或提供給Adapter之前,請嘗試以下代碼。

// 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可能不同。)

12月6日至19日:49:53.489:信息/主頁(2627):2130837504
12月6日至19日:49:53.489:信息/主頁(2627):2130837505
十二月6日至19日:49:53.489:INFO /家庭(2627):2130837508
十二月6日至19日:49:53.489:INFO /家庭(2627):2130837507
十二月6日至19日:49:53.489:INFO/Home(2627):2130837506
06-19 12:49:53.489:INFO/Home(2627):2130837509
06-19 12:49:53.489:INFO/Home(2627) 2130837510
十月6日至19日12:49:53.489:INFO /家庭(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)); 
} 

輸出。 (你運行你的代碼時,都會輸出將是不同的,所以不要與以前比較一個。)

十二月6日至19日:49:53.489:信息/主頁(2627):2130837511
06- 19 12:49:53.489:INFO/Home(2627):2130837504
06-19 12:49:53.489:INFO/Home(2627):2130837506
06-19 12:49:53.489:INFO/Home(2627 ):2130837508
06-19 12:49:53.489:INFO /家庭(2627):2130837510
06-19 12:49:53.489:INFO /家庭(2627):2130837505
06-19 1時差11分: 53.489:信息/首頁(2627):2130837507
12月6日至19日: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; 
}