1

CheckedTextView があり、次のクリックまでチェックボックスが更新されません。

レイアウトに listView とボタンがあるため、私のアクティビティは ListActivity ではなく Activity を拡張しています。

ListView ItemClickListener を次のように設定しています。問題は、別の項目をクリックするまでチェックボックスが「チェック済み」として表示されないことです。行 3 をクリックしてから、行 4 と行 3 のハイライトをクリックします。行 10 をクリックすると、行 4 が最終的にハイライトされます。「ハイライト」とは、チェックボックスが緑色に変わることを意味します。

チェックボックスを強制的に再描画/更新するためにどのメソッドを呼び出す必要があるのか​​ わかりません。cbview.refreshDrawableState(); を呼び出してみました。および cbview.getCheckMarkDrawable().invalidateSelf(); setChecked の後ですが、何もしていないようです。

    listView
        .setOnItemClickListener(new AdapterView.OnItemClickListener() {
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                CheckedTextView cbview = (CheckedTextView)view;
                boolean checked = cbview.isChecked();
                cbview.setChecked(!checked);
                Log.d("Test", "clicked:" + position + " : " + id);
            }

        });

更新: 回答:

アダプターを最終的にする必要がありました:

    final ArrayAdapter<MyOption> adapter = new ArrayAdapter<MyOption>(this,
            android.R.layout.simple_list_item_checked, options);

次に、onItemClick で adapter.notifyDataSetChanged() を呼び出します。

listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            public void onItemClick(AdapterView<?> parent, View view,  int position, long id) {                 
                CheckedTextView cbview = (CheckedTextView)view;
                boolean checked = cbview.isChecked();
                cbview.setChecked(!checked);
                Log.d("Test", "clicked:" + position + " : " + id + ":" + cbview.isChecked());
                adapter.notifyDataSetChanged();                 
            }
4

1 に答える 1

0

試してみましたか

    listViewAdapater.notifyDataSetChanged();
于 2013-04-29T23:34:26.257 に答える