1

重複の可能性:
ListView の選択は、選択モードを終了した後も持続します

アプリケーションにリストビューがあり、listitem_row.xml(各アイテムに使用しているレイアウト)内に複数のコンポーネントが含まれています。私が直面している問題は、各項目の選択に ActionMode があることです。ユーザーが項目を選択すると、アクション モードが作成され、期待どおりに動作します。アクションモードを閉じると、選択前と同じように、アイテムが選択されていない/強調表示されている/アクティブになっている/チェックされているように見せたいです。ここに私が使用しているコードがあります:

if (selectedView.isPressed()) {
    selectedView.setPressed(false);
}
if (selectedView.isActivated()) {
    selectedView.setActivated(false);
}
if (selectedView.isSelected()) {
    selectedView.setSelected(false);
}
if (selectedView.isFocused()) {
    selectedView.clearFocus();
    selectedView.dispatchWindowFocusChanged(false);
}
selectedView.refreshDrawableState();
selectedView.requestLayout();
if (selectedView.isDirty()) {
    selectedView.postInvalidate();
}

参考までに、すべての組み合わせを単独で試してみました。上に貼り付けたコードは、何も機能していないように見えるときに到達した状態です。デバッグを使用してすべての状態を確認しました。ユーザーがアクション モードを閉じるボタンをクリックすると、真の状態にある唯一の状態がアクティブ化された状態になります。

リストビュー行のxmlは次のとおりです。

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/row"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:background="?android:attr/activatedBackgroundIndicator"
    android:orientation="vertical" >

    <LinearLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@+id/innerrow"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:background="@drawable/listview_selector"
        android:orientation="vertical" >

        <TextView
            android:id="@+id/listViewHeading"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:drawableLeft="@drawable/mydrawable"
            android:drawablePadding="5sp"
            android:gravity="center|left"
            android:paddingBottom="5sp"
            android:paddingLeft="15sp"
            android:paddingRight="15sp"
            android:paddingTop="5sp"
            android:textAppearance="?android:attr/textAppearanceSmall"
            android:textColor="@color/app_text_color"
            android:textStyle="bold" />

        <View
            style="@style/line"
            android:layout_width="match_parent"
            android:layout_height="1dp" />

        <TextView
            android:id="@+id/listViewDetail"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:paddingBottom="15sp"
            android:paddingLeft="15sp"
            android:paddingRight="15sp"
            android:paddingTop="5sp"
            android:textAppearance="?android:attr/textAppearanceSmall"
            android:textColor="@color/app_text_color" />
    </LinearLayout>

</LinearLayout>

任意の提案/フィードバックをいただければ幸いです。

4

1 に答える 1

0

単一選択モードが既にある ListView アイテムの場合、選択を削除するために必要な行は 2 行だけです。

myListView.clearChoices();
myListView.requestLayout();

これで私の問題は解決しました。

于 2012-10-06T12:32:07.080 に答える