我在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));
但问题行为没有任何改变
答案 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画布上),并且它成功了。不再有奇怪的小图标,这些小图标以后会变大。