Colorというカスタム ビューを作成しました。Color のオブジェクトを使用して GridView を塗りつぶします (同じ問題が ListView にもあります)。
私の仕事は、ユーザーが 1 つの色を選択して強調表示できるようにすることです。
以前はそのようなことをしていましたが、ウィジェットの構築にのみ使用し、すべてが機能しました。今回は自前のものを使用。
このコードはアイテムのクリック用です:
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
int color = (int)id;
Log.d(TAG, "Selected color: " + id);
view.setSelected(true);
view.invalidate();
}
Color.onDraw:
@Override
public void onDraw(Canvas canvas) {
if (isSelected()) {
Log.d(TAG, "color draw selected");
} else {
Log.d(TAG, "not selected " + color);
}
}
またsetChoiceMode(AbsListView.CHOICE_MODE_SINGLE);
、この GridView に設定します(これAbsListView.CHOICE_MODE_MULTIPLE
も役に立ちません)
ログに次のように表示されます。
Selected color: 8355711
not selected 16711680
not selected 16743680
not selected 8355711
確かに、カラーアイテムは時間通りに再作成されていません.
GridView をユーザーのデフォルト ウィジェットである ListView に変更しようとしました (onDraw() のみをオーバーライド)。何も役に立ちません。多分私は何かを忘れましたか?
私の意見では、GridView はどういうわけか選択されたステータスをドロップします。
さらに情報が必要な場合は、教えてください。
添加:
デバッガーで確認しました。色付きのビュー 8355711 は、両方の関数で同じオブジェクトです。
setOnItemSelectedListener(this); を使用しました。アイテムの選択を追跡します。しかし、このリスナーでは何も起こりません。