The Common's Ware Multi-Choice Action Mode example似乎使用了ListView
的某些默认行为。特别是,当用户长按以启动动作模式时,或者如果用户已经单击动作,则列表布局中的CheckedTextView
会自动检查(或清除)。我已经开始深入研究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
仅在ListView
的直接子级实现Checkable
时才能够处理复选框。为了简化复杂的布局,我创建了一个CheckableLinearLayout组件,可以在这种情况下使用它。关于android - 具有MultiChoice操作模式的ListView中的自动复选框,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24377482/