setImageResource()不会直接更新我的ImageView大小/内容

时间:2013-02-15 12:37:19

标签: android android-layout

我在listview活动中有一行,选择行时应更改图像。新图像与原始图像相同但更大(双倍大小)。取消选择它时应该减少(选择是使用我的内部选择实现的,而不是Android键盘选择类型)。

问题是当(选择)我使用setImageResource()更改我的ImageView()的图片(在绑定时),它不会在第一次单击时更新到我的列表行中的新的更大版本。第二次执行绑定工作正常。这同样适用于取消选择的旧项目。更改为较小的图标直到第二次单击才会生效。每当我选择另一行而不是当前选择的行时,问题就会重复,并在第二次单击时再次开始正常工作。

我已逐步完成代码并看到我将正确的ID传递给ImageView,这是因为当选择/取消选择时,另一个在同一行显示黄色边框的视图会更改为可见/隐藏。

对我而言,感觉就像setImageResource()没有立即刷新视图,但在视图或行上使用invalidate()根本没有效果。

这是一个错误(如何解决)或我做错了什么?

代码:(来自我的持有者类使用持有者模式 - 由适配器绑定方法执行)

@Override
public void refreshFromCursor(final Context context, final Cursor cursor) {
...
boolean selected = adapter.getSelectedPosition()==cursor.getPosition();
if (selected){
  selectedIndicator.setVisibility(View.VISIBLE); // Show a "selected" yellow border indicator to the left
} else {
  selectedIndicator.setVisibility(View.GONE); // Hide a "selected" yellow border indicator to the left
}
...
if (selected) completionResId = R.drawable.folder_selected;
else completionResId = R.drawable.folder;
...
statusIcon.setImageResource(completionResId); // !!!!! This is where I set the image that does not refresh/resize
...
}

还测试了交换

statusIcon.setImageResource(completionResId);

statusIcon.setImageDrawable(context.getResources().getDrawable(completionResId));

但问题行为没有任何改变

2 个答案:

答案 0 :(得分:0)

在我看来,这是关于你实施的方式,

如果您向我们提供了refreshFromCursor(...)函数的完整代码,我们可以更好地了解您所做的事情。

答案 1 :(得分:0)

我发现了一个骇客。只是使您的可绘制对象更大

<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="500dp"
android:height="500dp"
android:viewportWidth="139"
android:viewportHeight="139">

<path
    android:fillColor="#000000"
    android:pathData="M117.037,61.441L36.333,14.846c..." />
</vector>

在这里,我将可绘制对象设置为在500dp画布上绘制(而不是原来的139dp画布上),并且它成功了。不再有奇怪的小图标,这些小图标以后会变大。