我的 Activity 类的 onCreate() 方法中有下面提到的代码。 对某些人来说可能很明显,这是行不通的,因为图像只渲染一次,在执行 onItemClick 很久之后。
gridView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
ImageView imageView=(ImageView)view.findViewById(R.id.adaptorItemImageView);
if(someCOMPLEXlogic)
{ // Line 1
imageView.setImageResource(XXXXXX);
// Line 2
Thread.sleep(2000);
// how to show one image, wait for 2 secs, and then show another one?
// Line 3
imageView.setImageResource(YYYYYY);
}
}
});
因此,我只能看到图像 YYYYYY。 我尝试使用 Threads 和 AsyncTask,将第 2 行和第 3 行替换为对新 Thread() 的调用,它们执行相同的操作,但出现类似
的错误A different thread cannot access UI thread views,
(Something Like that, I do not remember,apologies)
有人可以给我解决方法来实现相同的行为而不调用新的 Activity 吗? 也有人可以解释为什么首先会出现这个问题(Android 不会立即渲染图像,它是如何工作的?)
最佳答案
调用 View 的 postDelayed 方法,如下所示。不过,您可以将 imageView 更改为 final。
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
final ImageView imageView=(ImageView)view.findViewById(R.id.adaptorItemImageView);
if(someCOMPLEXlogic)
{
imageView.setImageResource(XXXXXX);
imageView.postDelayed(new Runable() {
@Override
public void run() {
imageView.setImageResource(YYY);
}
}, 2000);
}
}
关于Android:在onItemClickListener 中的onClick 更改图像两次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27649795/