具有MultiChoice操作模式的ListView中的自动CheckBox

时间:2014-06-24 02:33:38

标签: android

The Common's Ware Multi-Choice Action Mode example似乎使用ListView的某些默认行为。特别是,当用户长按以启动操作模式时,或者如果操作模式已处于活动状态,则当用户单击时,列表布局中的CheckedTextView会自动检查(或清除)一个物品。我已经开始深入研究AbsListView的源代码,而且我不知道它在哪里设置"检查"州。有什么想法如何实现?更重要的是,我如何在自己的应用程序中利用这种行为?

1 个答案:

答案 0 :(得分:2)

经过一些进一步的研究后,我在AbsListView中找到了这种方法:

private void updateOnScreenCheckedViews() {
    final int firstPos = mFirstPosition;
    final int count = getChildCount();
    final boolean useActivated = getContext().getApplicationInfo().targetSdkVersion
            >= android.os.Build.VERSION_CODES.HONEYCOMB;
    for (int i = 0; i < count; i++) {
        final View child = getChildAt(i);
        final int position = firstPos + i;

        if (child instanceof Checkable) {
            ((Checkable) child).setChecked(mCheckStates.get(position));
        } else if (useActivated) {
            child.setActivated(mCheckStates.get(position));
        }
    }
}

根据我的理解,如果ListView的直接子项实现ListViewCheckable只能处理复选框。为了简化复杂的布局,我创建了一个CheckableLinearLayout组件,可以在这种情况下使用。