1

これが私がやりたいことです:

メインのアクティビティには、ListView アイテムに TextView と CheckBox が含まれている必要があるため、カスタム アダプターを備えた ListView があります。アイテムを長押しすると、ActionBar でコンテキスト アクション モードを使用し、選択した ListView アイテムをハイライトします。

これが私がしたことです:

カスタム アダプターについてはこのチュートリアル、ActionMode についてはこのチュートリアルに従いました。どちらも正常に動作しています。アダプターと ListView の基礎となるデータベースと対話できます。カスタム アダプター クラスで ActionMode のすべてを実装したことを言及しておく必要があります。

機能していないものは次のとおりです。

ListView アイテムの TextView のコンテンツに対応するデータベース エントリを削除することはできますが、選択した ListView アイテムを強調表示する方法がわかりません。

4

3 に答える 3

3

私は最終的に自分で解決策を見つけることができました。いくつかの異なる手順を実行しました。

コード関連の手順:

  1. ActionMode 関連のすべてのコードをアダプター クラスからアクティビティ クラスに移動しました。その前に、ListView アイテムの TextView で OnLongClickListener を使用してアクション モードをトリガーしました。その時点では、TextView のテキストを ActionMode で使用できるようにする方法がわからなかったからです (アイコンをクリックして削除できるようにしたい)アクションバーで)。ListView項目の1つでCLickListenerを使用すると、Activityで設定したListView項目のOnClickListenerが「ブロック」されます。それをしないでください!!!

  2. アクティビティの ListView に OnItemLongClickListener を設定しました。そこから、ActionMode をトリガーし、アイテムの TextView からテキストを次のように保存します (アダプターに設定されitemNames、Activity のクラス属性です)。List<String>deleteString

    deleteString = itemNames.get(_postion);

しかし、これらの手順は、XML を介して行わなければならなかった変更のために、想定どおりにコードを動作させるためだけのものでした。

XML 関連の手順:

  1. ListView アイテムのメイン レイアウトから background 属性を削除する必要がありました
  2. 外側の行レイアウトに次の属性を追加する必要がありました:android:clickable="true"そしてandroid:longClickable="true"(念のため、longClickable で十分かもしれません ;-) )
  3. 独自のセレクター ドローアブルを作成し、それを 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>
于 2013-02-26T09:28:42.097 に答える
0

同じ問題に直面したため、この質問に出くわしました。つまり、クリックとロングクリックでリストビューアイテムを強調表示したかったのです。これは私にとってはうまくいきます。 カスタム アダプターを使用した Android マルチチョイス モード リスナー

于 2013-10-08T13:37:44.713 に答える
0

リスト行レイアウトのバックグラウンド ドローアブルで android:state_activated=true を設定できます

<selector xmlns:android="http://schemas.android.com/apk/res/android" >
<item android:state_activated="true">
    <layer-list >
        <!-- <item >
            <color android:color="#ff00aa00"/>
        </item> -->

        <item>
            <shape android:shape="rectangle">
                <solid android:color="#aa58BAED"/>
                <corners android:radius="3px"/>
            </shape>
        </item>
    </layer-list>
</item>
<item >
    <color android:color="#00000000"/>
</item>
</selector>

ただし、Android API> Api 11でのみ機能します

于 2013-02-21T09:10:49.653 に答える