私は最終的に自分で解決策を見つけることができました。いくつかの異なる手順を実行しました。
コード関連の手順:
ActionMode 関連のすべてのコードをアダプター クラスからアクティビティ クラスに移動しました。その前に、ListView アイテムの TextView で OnLongClickListener を使用してアクション モードをトリガーしました。その時点では、TextView のテキストを ActionMode で使用できるようにする方法がわからなかったからです (アイコンをクリックして削除できるようにしたい)アクションバーで)。ListView項目の1つでCLickListenerを使用すると、Activityで設定したListView項目のOnClickListenerが「ブロック」されます。それをしないでください!!!
アクティビティの ListView に OnItemLongClickListener を設定しました。そこから、ActionMode をトリガーし、アイテムの TextView からテキストを次のように保存します (アダプターに設定されitemNames
、Activity のクラス属性です)。List<String>
deleteString
deleteString = itemNames.get(_postion);
しかし、これらの手順は、XML を介して行わなければならなかった変更のために、想定どおりにコードを動作させるためだけのものでした。
XML 関連の手順:
- ListView アイテムのメイン レイアウトから background 属性を削除する必要がありました
- 外側の行レイアウトに次の属性を追加する必要がありました:
android:clickable="true"
そしてandroid:longClickable="true"
(念のため、longClickable で十分かもしれません ;-) )
- 独自のセレクター ドローアブルを作成し、それを ListView アイテム レイアウトの背景として設定する必要がありました。
android:background="@drawable/my_selector"
このようにして、次のことを達成しました。
- カスタム レイアウト (TextView + CheckBox) とカスタム アダプターを使用して、Activity に ListView があります。
- CheckBox で OnCheckedChangeListener を使用できます
- ListView アイテムを長押しして ActionMode を有効にし、TextView のコンテンツにアクセスしてさらに処理することができます
- ListView 項目をクリックすると、既定の holo_blue_light バックグラウンド ハイライトが表示されます (アプリには、Holo Theme Light と Dark Action Bar を使用しています)。
XML 経由で作業できなかった唯一のことは、ActionMode がアクティブな間、ListView アイテムを強調表示したままにすることでした。
_view.setBackgroundResource(android.R.color.holo_blue_dark);
Activity クラスの ListView の OnItemLongClickListener で (あなたの ListView を再描画または更新することを忘れないonDestroyActionMode(ActionMode _mode)
でくださいActionMode.Callback
)
ほら!これがあなたの何人かを助けることを願っています!数日とたくさんの調査が必要でした。
ここに、ListView アイテム レイアウトとセレクター レイアウトのコード例を示します。
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@drawable/my_selector"
android:clickable="true"
android:longClickable="true" >
<CheckBox
android:id="@+id/checkBox"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:layout_centerVertical="true"
android:layout_marginRight="6dp" >
</CheckBox>
<TextView
android:id="@+id/shoppingListItemName"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_marginLeft="10dp"
android:layout_toLeftOf="@id/checkBox"
android:gravity="center_vertical"
android:minHeight="?android:attr/listPreferredItemHeightSmall"
android:textAppearance="?android:attr/textAppearanceListItemSmall"
android:textIsSelectable="true" >
</TextView>
</RelativeLayout>
私のセレクター:
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true">
<layer-list>
<item>
<shape android:shape="rectangle">
<solid android:color="@android:color/holo_blue_light" />
</shape>
</item>
</layer-list>
</item>
<item>
<color android:color="#00000000" />
</item>
</selector>