android:list.getcheckeditempositions()总是返回null
-
26-09-2019 - |
题
我通过扩展SimpleCursorAdapter创建了一个自定义列表视图。结果是Image + CheckEdTextView(文本 +复选框)。
在我遇到错误的复选框问题之后(检查)看这里)我不得不删除 lv.setChoiceMode(listView.choice_mode_multiple); 来自ongreate。
现在,我单击ListItem行,并检查右侧的复选框。
我要做的是在检查1个或多个复选框时可视化。
这是代码:
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个或更多的复选框,然后仅取消选中一个,则线层消失,这意味着
SparseBooleanArray lala = ((ListView) parent).getCheckedItemPositions();
一片空白。如果还有其他复选框检查,为什么还要空?如果我切换
findViewById(R.id.bottom_control_bar).setVisibility(LinearLayout.INVISIBLE);
至findViewById(R.id.bottom_control_bar).setVisibility(LinearLayout.GONE);
(就像我想做的那样)第一个复选框正在正确检查,线度层次消失后,一切都又一烂了,就像在 我以前的问题.
感谢任何帮助!
解决方案
您为什么希望GetCheckEckedItemPositions()如果没有检查项目,则返回null?看起来您的选择模式是错误的
A SparseBooleanArray which will return true for each call to get(int position) where position is a position in the list, or null if the choice mode is set to CHOICE_MODE_NONE.
数组仅在Choice_mode_none时才为null。
为什么不尝试这样的事情?
if (((ListView) parent).getCheckedItemPositions().size() > 0){
findViewById(R.id.bottom_control_bar).setVisibility(LinearLayout.VISIBLE);
else{
findViewById(R.id.bottom_control_bar).setVisibility(LinearLayout.GONE;
}
更新
我很确定这与这条线有关
View v = inView;
if (v == null) {
LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
v = inflater.inflate(R.layout.image_list, null);
}
您可以获得视野,然后将视图重新分配给Alfter。我有些茫然,尽管这完全会赋予您您要放心的行为。您可能还想尝试 bindView()
方法虽然我不确定为什么。也许与其使用默认的Android布局(您要给SetAdapter的一个布局,要制作自己的布局。显然,它对分配了哪种布局的视图感到困惑。