我通过扩展 SimpleCursorAdapter 创建了一个自定义 ListView。结果是 IMAGE + CheckedTextView(文本 + 复选框)。
在我检查了错误的复选框后遇到问题(请参阅此处),我不得不删除lv.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE); 从 onCreate.
现在我单击 ListItem 行并选中正确的复选框。
我要做的是在选中 1 个或多个复选框时制作一个 LinearLayout.VISIBLE,并在未选中任何复选框时制作 LinearLayout.GONE。
这是代码:
lv.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
CheckedTextView markedItem = (CheckedTextView) view.findViewById(R.id.btitle);
if (!markedItem.isChecked()) {
markedItem.setChecked(true);
//show bottom control panel
findViewById(R.id.bottom_control_bar).setVisibility(LinearLayout.VISIBLE);
} else {
markedItem.setChecked(false);
SparseBooleanArray lala = ((ListView) parent).getCheckedItemPositions();
//if no checkbox is checked, hide bottom control panel
if (lala == null) {
findViewById(R.id.bottom_control_bar).setVisibility(LinearLayout.INVISIBLE);
}
}
view.refreshDrawableState();
//showSortBtn(markedItem);
} });
这就是我将 listView 绑定到自定义适配器的方式:
projection = new String[] { Browser.BookmarkColumns._ID,
Browser.BookmarkColumns.FAVICON, Browser.BookmarkColumns.TITLE,
Browser.BookmarkColumns.URL };
displayFields = new String[] { Browser.BookmarkColumns.TITLE,
Browser.BookmarkColumns.FAVICON, Browser.BookmarkColumns.URL };
int[] displayViews = new int[] { android.R.id.icon, android.R.id.text1 };
cur = managedQuery(BOOKMARKS_URI, projection,
Browser.BookmarkColumns.BOOKMARK + " == 1", null, Browser.BookmarkColumns.VISITS + " DESC");
setListAdapter(new ImageCursorAdapter(this,
android.R.layout.simple_list_item_single_choice, cur,
displayFields, displayViews));
我对此有两个问题:
如果我选中 2 个或更多复选框,然后只取消选中一个,LinearLayout 就会消失,这意味着
SparseBooleanArray lala = ((ListView) parent).getCheckedItemPositions();
它为空。如果还有其他复选框被选中,为什么它为空?如果我切换
findViewById(R.id.bottom_control_bar).setVisibility(LinearLayout.INVISIBLE);
到findViewById(R.id.bottom_control_bar).setVisibility(LinearLayout.GONE);
(就像我想做的那样)第一个复选框被正确检查,并且在 LinearLayout 消失之后,一切又变得一团糟,就像我之前的问题一样。
感谢任何帮助!