9

コンテキスト アクション メニューの作成に関するAndroid の公式サイトのチュートリアルに従いました。以下のコードを使用して、ListView アイテムの 1 つを長押しすると、それ選択されますが、選択されたことを視覚的に示しません。Holo Light テーマを使用しています。ListView で選択したすべての項目の背景色が青色に変わることを期待しています。

これは正常な動作ですか?

テストを試みましlistView.setChoiceMode(ListView.CHOICE_MODE_SINGLE);たが、1 行も強調表示されません。

を使用listView.setSelector(android.R.color.holo_blue_light);すると、最後に選択された行が強調表示されるように見えますが、選択されている他の行は強調表示されません。

何か間違ったことをしたのでしょうか、それとも背景を手動で変更する必要がありますか? もしそうなら、どのように?

listView.setSelector(android.R.drawable.list_selector_background);また、さまざまな状態のアイテムを含む実際のセレクターを試してみました。残念ながら、最後に選択された ListView アイテムにのみ適用されます。

public class MyActivity extends ListActivity {

    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        // The list is generated here

        ListView listView = getListView();
        listView.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE_MODAL);

        listView.setMultiChoiceModeListener(new MultiChoiceModeListener() {
            // implements empty methods
        }
    }
}

ありがとう!

4

3 に答える 3

0

ActionMode では、ListView は、ユーザーが項目をクリックすると、項目のチェック状態を自動的に追跡します。

ListView のアダプターを使用している場合は、チェック状態に基づいて項目の背景を設定します。

@Override
public void bindView(final View view, final Context context, final Cursor cursor)
{
    int pos = cursor.getPosition();

    boolean selected = ((SessionsActivity)context).listView.isItemChecked(pos);
    if(!selected)
        view.setBackgroundResource(R.drawable.list_selector);
    else
        view.setBackgroundResource(R.drawable.list_selector_active);
...

また、各アイテムをクリックした後、ListView を無効にする必要もあります。

 private AbsListView.MultiChoiceModeListener multiChoiceModeListener = new AbsListView.MultiChoiceModeListener()
    {
        @Override
        public void onItemCheckedStateChanged(ActionMode mode, int position,
                                              long id, boolean checked)
        {
            // Here you can do something when items are selected/de-selected,
            // such as update the title in the CAB
            listView.invalidateViews();
        }
于 2018-06-01T08:36:22.390 に答える