我通过扩展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));

我有两个问题:

  1. 如果我检查2个或更多的复选框,然后仅取消选中一个,则线层消失,这意味着 SparseBooleanArray lala = ((ListView) parent).getCheckedItemPositions(); 一片空白。如果还有其他复选框检查,为什么还要空?

  2. 如果我切换 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的一个布局,要制作自己的布局。显然,它对分配了哪种布局的视图感到困惑。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top