我在我的应用程序中使用菜单,其中所有菜单项都存储在列表中。当调用 getView 方法时,我指定项目名称和图标。对于图标,我使用 StateListDrawable(但我也尝试使用简单的颜色绘制)。问题是,每当我尝试滚动菜单并调用 getView 时,我的整个列表都会消失。我确定了它的原因,这是一个图像视图方法 setImageDrawable(); 如果我将其注释掉,一切正常。这个方法在另一个线程上调用,因为我首先需要下载图像。如果我将 setImageDrawable() 代码直接移动到 getView 方法,它将加载所有内容并且菜单不会消失,但是在下载图像和菜单可用之前延迟太长。
有效的代码:
icon.setVisibility(View.INVISIBLE);
icon.setImageDrawable(new ColorDrawable(Color.CYAN));
icon.setVisibility(View.VISIBLE);
使菜单消失的代码。
context.getNetworkManager().execute(new ImageRunnable() {
boolean success = true;
@Override
public void run(Bitmap image) {
if (image == null) {
success = false;
}
final Bitmap selectedImage = image;
context.getNetworkManager().execute(new ImageRunnable() {
@Override
public void run(Bitmap image) {
if (image == null) {
success = false;
}
if (success) {
StateListDrawable icons = new StateListDrawable();
icons.addState(new int[] {android.R.attr.state_pressed},
new BitmapDrawable(context.getResources(), selectedImage));
icons.addState(new int[] {android.R.attr.state_selected},
new BitmapDrawable(context.getResources(), selectedImage));
icons.addState(new int[] {-android.R.attr.state_selected},
new BitmapDrawable(context.getResources(), image));
icon.setImageDrawable(icons);
//icon.setImageDrawable(new ColorDrawable(Color.CYAN));
icon.setVisibility(View.VISIBLE);
}
}
});
}
});
任何想法如何解决这个问题?这发生在模拟器和 Galaxy SII 上,但不在 Galaxy SIII 上。