android - 具有多选操作模式的 ListView 中的自动复选框

标签 android

The Common's Ware Multi-Choice Action Mode example似乎使用了 ListView 的一些默认行为。特别是,当用户长按以启动操作模式时,或者如果操作模式已经处于 Activity 状态,当用户单击一个元素。我已经开始研究 AbsListView 的源代码,但我没有看到它在哪里设置“已检查”状态。知道这是如何实现的吗?更重要的是,如何在我自己的应用中利用这种行为?

最佳答案

经过进一步研究,我在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 的直接子级实现 Checkable,则 ListView 只能处理复选框。为了方便复杂的布局,我创建了一个 CheckableLinearLayout可以在这种确切情况下使用的组件。

关于android - 具有多选操作模式的 ListView 中的自动复选框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24377482/

相关文章:

Android 2.1 getEditableText() 返回 null/空字符串

android - 使用操作栏主页作为向上按钮,主页 Activity savedInstanceState 始终为空

java - Android中如何输出文本结果?

java - 使用 Fragments 和 ViewPager 的良好做法

android - NoSuchMethodError : No static method decodeBase64 错误

android - 了解 DDMS 日志

android - 减少推送角标(Badge)计数

java - 理解 cuboc libgdx 示例

Android 应用程序启动器图标大小问题

android - Osmdroid MylocationNewOverlay - 设置位置更新频率