私は現在、ある種のアイテムを表示するためにListViewを使用しています。複数のアイテムを選択し、Android4.xでうまく機能する大量に削除するアクションモードを実装しました。しかし、APIバージョン8または9(android 2.2.x / 2.3.x)で試したところ、選択は期待どおりに内部的に機能しますが、行アイテムはランダムに色付けされます。
ユーザーが最初の行を選択すると、内部的に最初の行が選択されますが、行番号4は色付きです。別の行をクリックすると、この行と最初の行が色付けされます。これは、4.xデバイスと同じように正常に動作すると予想される奇妙な動作です。
オーバーライドを長押ししてアクションモードをアクティブにし、ListViewの長クリック項目を確認します。
@Override
public boolean onItemLongClick(AdapterView<?> adapterView, View view, int position, long id) {
if (actionMode == null) {
listView.setOnItemClickListener(new CABClickListener());
actionMode = startActionMode(new ListActionMode());
// Check item pressed with long click
listView.setItemChecked(position, true);
view.setBackgroundColor(checkedColor);
logger.debug("Item at pos. " + position + ", checked.");
}
return true;
}
CABClickListenerは、ListViewの項目をチェック/チェック解除し、それらを内部的にマークし、その背景色を変更します。
private final class CABClickListener implements AdapterView.OnItemClickListener {
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int position, long id) {
if (listView.isItemChecked(position)) {
view.setBackgroundColor(checkedColor);
logger.debug("Item at pos. " + position + ", checked.");
} else {
view.setBackgroundColor(uncheckedColor);
logger.debug("Item at pos. " + position + ", unchecked.");
}
}
}
これらのクラス/メソッドはアクティビティ内にあり、そのlistView
上で宣言されています。
その他の考慮事項:
- ActionBarSherlock(CABが表示されますが、ここでは重要ではないと思います)とRoboguiceを使用しますが、問題はありません。
私はいつもエミュレーターで開発していました。さらに、Android 3.xでアプリを試すことができなかったため(このバージョンで問題が発生し、エミュレーターが起動しません)、これらのバージョンで問題が解決するかどうかはわかりません。更新:android 3.0 API 11でテストされ、4.xでも正常に動作します。- コードをデバッグしました
View
が、両方のメソッドのsは問題ありませんが、呼び出すとview.setBackgroundColor(checkedColor);
、別のメソッドがView
色付きになります。
なにか提案を?誰もが助けてくれることを願っています!