2013-06-19 132 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; 
}