Java 如何从随机化arraylist中知道最后一次使用的drawable是什么?

Java 如何从随机化arraylist中知道最后一次使用的drawable是什么?,java,android,random,Java,Android,Random,我有2个列表,一个用于ImageView的数组和一个用于Drawable的数组: List<Integer> imageViews = new ArrayList<Integer>(); List<Integer> images = new ArrayList<Integer>(); 现在,当我点击一个特定的星号(或者可以是onCreate方法中的星号)时,它应该相应地随机化 可在随机图像视图中随机绘制: View.OnClickList

我有2个列表,一个用于ImageView的数组和一个用于Drawable的数组:

List<Integer> imageViews = new ArrayList<Integer>();
List<Integer> images = new ArrayList<Integer>();
现在,当我点击一个特定的星号(或者可以是onCreate方法中的星号)时,它应该相应地随机化

可在随机图像视图中随机绘制:

    View.OnClickListener tapHandler = new View.OnClickListener() 
    {

        @Override
        public void onClick(View v) 
        {
            // TODO Auto-generated method stub


             imageadd();
                viewadd();


               Random rng = new Random(); 
                List<Integer> generated = new ArrayList<Integer>();
                for (int i = 0; i < 12; i++)
                {
                  while(true)
                    {

                      Integer next = rng.nextInt(imageViews.size()) ;
                      if (!generated.contains(next))
                        {
                         generated.add(next);
                         ImageView iv = (ImageView)findViewById(imageViews.get(next));
                         iv.setImageResource(images.get(next));
                         images.remove(next);
                         imageViews.remove(next);
                         break;
                        }

                    }

                }

         }

    };
View.OnClickListener tapHandler=new View.OnClickListener()
{
@凌驾
公共void onClick(视图v)
{
//TODO自动生成的方法存根
imageadd();
视图添加();
随机rng=新随机();
生成的列表=新的ArrayList();
对于(int i=0;i<12;i++)
{
while(true)
{
整数next=rng.nextInt(imageViews.size());
如果(!generated.contains(下一步))
{
已生成。添加(下一步);
ImageView iv=(ImageView)findViewById(ImageView.get(next));
iv.setImageResource(images.get(next));
图像。删除(下一步);
imageview.remove(下一步);
打破
}
}
}
}
};

所以我想知道for循环中最后一个可绘制的是什么,这样我就可以在其中设置标记了?

只要在循环外保留对最后一个
ImageView
的引用即可

// last image reference
Drawable lastImg = null;

List<Integer> generated = new ArrayList<Integer>();
for (int i = 0; i < 12; i++) {
    while (true) {
        Integer next = rng.nextInt(imageViews.size());
        if (!generated.contains(next)) {
            generated.add(next);
            ImageView iv = (ImageView) findViewById(imageViews
                    .get(next));
            iv.setImageResource(images.get(next));

            // skip when i = 0
            if (lastImg != null) {
                iv.setTag(lastImg); // tag the last drawable
            }

            // store the current drawable
            lastImg = getResources().getDrawable(images.get(next));

            images.remove(next);
            imageViews.remove(next);
            break;
        }
    }
}
//上次图像引用
可绘制的lastImg=null;
生成的列表=新的ArrayList();
对于(int i=0;i<12;i++){
while(true){
整数next=rng.nextInt(imageViews.size());
如果(!generated.contains(下一步)){
已生成。添加(下一步);
ImageView iv=(ImageView)findViewById(ImageView
.得到(下一个);
iv.setImageResource(images.get(next));
//当i=0时跳过
if(lastImg!=null){
iv.setTag(lastImg);//标记最后一个可绘制的
}
//存储当前可提取数据
lastImg=getResources().getDrawable(images.get(next));
图像。删除(下一步);
imageview.remove(下一步);
打破
}
}
}

而且,除非它有其他用途,否则您也可以只调用一次
imageadd()
viewadd()
,而不是每次调用
onClick()
。您只需跳过调用
images.remove()
imageview.remove()
即可。那么,上次使用的imageview的值不会是iv吗?不会,因为
iv
是循环的本地值,即在循环结束时被清除。另外,每次迭代都会通过调用
findViewById()
重新初始化。如果您想重用它(冒着代码可读性差的风险),可以将其移出循环以增加其范围。然后,
setTag()
调用应该在
findViewById()
之前。尝试了你的代码并“toast ed”了lastView的值,我得到了如下值:android.widget.ImageView{…app:id/star11}。它显示的ImageView比我要的可绘制图像更多。啊,好的,我知道了。看看更新。它现在在当前的
ImageView
上标记最后一个
Drawable
。我现在正在获取Drawable,它显示类似于android.graphics.Drawable的内容。BitmapDrawable@xxxxx但最后一件事是,我能否获得与它们命名为'R.drawable.xxxx'相同的标识符?
// last image reference
Drawable lastImg = null;

List<Integer> generated = new ArrayList<Integer>();
for (int i = 0; i < 12; i++) {
    while (true) {
        Integer next = rng.nextInt(imageViews.size());
        if (!generated.contains(next)) {
            generated.add(next);
            ImageView iv = (ImageView) findViewById(imageViews
                    .get(next));
            iv.setImageResource(images.get(next));

            // skip when i = 0
            if (lastImg != null) {
                iv.setTag(lastImg); // tag the last drawable
            }

            // store the current drawable
            lastImg = getResources().getDrawable(images.get(next));

            images.remove(next);
            imageViews.remove(next);
            break;
        }
    }
}