ListView与CHOICE_MODE_MULTIPLE在自定义视图中使用CheckedText

时间:2011-04-10 15:01:14

标签: android

有很多关于如何使用CheckedTextView的问题,但我无法使其正常工作。

我有CursorAdapter个自定义视图,其中CheckedTextViewandroid:id="@android:id/text1"。我使用过android:id/text1因为有不同的问题提到如果你使用它,你将获得免费的选择模式。

如果我这样做:

final long[] checkedIds = mListView.getCheckedItemIds();
for ( int i = 0 ; i < mListView.getCheckedItemCount() ; i++ ) {
    Log.d(TAG, "id checked: " + checkedIds[i]);
}

我得到所有已检查的ID没有问题,但我在ListView中看不到任何视觉反馈。

换句话说,逻辑很好但是当我点击CheckedTextView绿色勾号没有出现时。

我正在阅读ListView src代码,我找不到对android:id/text1的任何引用,让我想知道我是否应该自己处理widget的检查状态。

是否有人可以找到使用android:id/text1来检查小部件的位置?

1 个答案:

答案 0 :(得分:33)

根据我对代码的阅读,该行必须实现Checkable

if (mChoiceMode != CHOICE_MODE_NONE && mCheckStates != null) {
    if (child instanceof Checkable) {
        ((Checkable) child).setChecked(mCheckStates.get(position));
    }
}

这适用于具有选择模式的列表的库存行布局,因为该行是CheckedTextView,它实现了Checkable

因此,请将Checkable界面添加到自定义View,将界面的方法委派给CheckedTextView,然后查看是否有效。