アプリにコンテキスト アクション バーを実装しようとしています。私は ListFragment を拡張しており、カスタム ArrayAdapter とリスト項目 xml を定義しています。アイテムをクリックすると正常に機能し、リスト アイテムの背景色が変わります。問題が発生しているのは、複数のアイテムを選択するときです。コンテキスト アクション バーが表示され、どのアイテムが選択されているかをログに記録しているため、アイテムに触れたときに実際にアイテムを選択していることがわかりますが、リスト アイテムの背景のハイライト色は変わりません。Fragments API を使用しているときに他の人がこの問題に遭遇したようで、適切に動作させるための一種のハックを考え出しました。ただし、リストに選択したアイテムが表示されない理由について、誰かが決定的な答えを持っているかどうか疑問に思っていました.
適切な測定のために、ここに私のコードがあります:
ListView list = getListView();
list.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE_MODAL);
list.setSelector(R.drawable.list_selector);
// configure contextual action bar
list.setMultiChoiceModeListener(new AbsListView.MultiChoiceModeListener() {
@Override
public void onItemCheckedStateChanged(ActionMode actionMode, int position, long id, boolean b) {
Log.i("debug", "item " + position + " changed state");
}
@Override
public boolean onCreateActionMode(ActionMode actionMode, Menu menu) {
MenuInflater inflater = actionMode.getMenuInflater();
inflater.inflate(R.menu.context_menu, menu);
return true;
}
@Override
public boolean onPrepareActionMode(ActionMode actionMode, Menu menu) {
return false;
}
@Override
public boolean onActionItemClicked(ActionMode actionMode, MenuItem item) {
switch (item.getItemId()) {
case R.id.delete:
Log.i("debug", "delete stuff");
return true;
default:
return false;
}
}
@Override
public void onDestroyActionMode(ActionMode actionMode) {
}
});