2

行が選択されたときに画像を変更する必要があるリストビュー アクティビティの行があります。新しい画像は同じですが、元の画像よりも大きくなります (2 倍のサイズ)。選択を解除すると縮小されるはずです(選択は、Androidキーボードの選択の種類ではなく、内部選択を使用して実装されます)。

問題は、(選択した) setImageResource() を使用して ImageView () の画像を (バインド時に) 変更すると、最初のクリックでリスト行の新しい大きなバージョンに更新されないことです。bind の 2 回目の実行は正常に機能します。同じことが、選択解除された古いアイテムにも当てはまります。小さいアイコンへの変更は、2 回目のクリックまで有効になりません。現在選択されている行とは別の行を選択するたびに問題が繰り返され、2回目のクリックで再び正しく機能し始めます。

私はコードをステップ実行し、正しい 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));

しかし、問題のある行動には何も変わりません

4

2 に答える 2