在 Listview 中检索选中 CheckBoxes 的项目

Posted

技术标签:

【中文标题】在 Listview 中检索选中 CheckBoxes 的项目【英文标题】:Retrieve checked CheckBoxes's items in Listview 【发布时间】:2011-01-16 14:49:58 【问题描述】:

我有 ListActivity,我正在使用自定义 CursorAdapter。

在列表的每个项目中,我还有复选框...

现在我的列表屏幕中有一个烫发按钮,当你按下它时,

它应该找到所有被“选中”的复选框,并对它的复选框被“选中”的项目进行一些操作。

我怎样才能找回所有选中的?

我已经完成了focusable:false,所以我可以使用OnClickListener,但我不知道还有多远 这.. 谢谢,

一些代码: 这是在我的 ListActivity 类中:

 final String columns[] = new String[]  MyUsers.User._ID,
                MyUsers.User.MSG, MyUsers.User.LOCATION ;

          int[] to = new int[]  R.id.toptext,   R.id.bottomtext,R.id.ChkBox,
                R.id.Location;

          Uri myUri = Uri.parse("content://com.idan.datastorageprovider/users");

          Cursor cursor = getContentResolver().query(myUri, columns, null, null, null);  

          startManagingCursor(cursor);  

           ListCursorAdapter myCursorAdapter=new ListCursorAdapter(this,R.layout.listitem, cursor, columns, to);

           this.setListAdapter(myCursorAdapter);

这是我的自定义光标适配器类:

public class ListCursorAdapter extends SimpleCursorAdapter



         private Context context;
    private int layout;

    public ListCursorAdapter(Context context, int layout, Cursor c,
            String[] from, int[] to)
    
        super(context, layout, c, from, to);

        this.context = context;

        this.layout = layout;

    

    @Override
    public View newView(Context context, Cursor cursor, ViewGroup parent)
    

        Cursor c = getCursor();

        final LayoutInflater inflater = LayoutInflater.from(context);
        View v = inflater.inflate(layout, parent, false);
                   return v;
          

@Override

    public void bindView(View v, Context context, Cursor c)
    
        TextView topText = (TextView) v.findViewById(R.id.toptext);
        if (topText != null)
        
            topText.setText("");
        

        int nameCol = c.getColumnIndex(MyUsers.User.MSG);
        String name = c.getString(nameCol);
        TextView buttomTxt = (TextView) v.findViewById(R.id.bottomtext);
        if (buttomTxt != null)
        
            buttomTxt.setText("Message: "+name);
        

        nameCol = c.getColumnIndex(MyUsers.User.LOCATION);
        name = c.getString(nameCol);
        TextView location = (TextView) v.findViewById(R.id.Location);
        if (locationLinkTxt != null)
        
            locationLinkTxt.setText(name);
        

        

【问题讨论】:

请发布您的代码... 我不知道我应该发布什么,因为它之间的必要代码丢失了,请告诉我你不明白什么?我所拥有的只是列表视图,在每个项目中我还有一个复选框,列表视图通过 CursorAdapter 绑定到数据库。我想按一下按钮,以检索三个复选框状态为 CHECKED 的所有项目。谢谢你,雷。 【参考方案1】:
        //Modify to meet your needs
        String[] from = new String[] YourDbAdapter.KEY_WORDS_ROWID, YourDbAdapter.KEY_WORDS_ROWID;
        int[] to = new int[] R.id.row_item_checkbox;

        mAdapter = new SimpleCursorAdapter(this, R.layout.row_item_with_checkbox, yourDbCursor, from, to);


      mAdapter.setViewBinder(new SimpleCursorAdapter.ViewBinder() 

       @Override
       public boolean setViewValue(View view, Cursor cursor, int columnIndex) 


        if(view.getId() == R.id.myCheckbox )
         

         CheckBox cb = (CheckBox) view;
         cb.setOnClickListener(new OnClickListener() 

          @Override
          public void onClick(View v) 

           final long id = cursor.getLong(columnIndex); //Your row id
                               //You can do the necessary work here such as adding to an List or somehting

          
         );


         return true; 
         

        return false;
       


      );

【讨论】:

如果你的意思是数据库索引,我不确定我应该放什么?我的复选框状态如何连接到我的数据库? 如果有人可以帮忙吗?我真的被困在这里..无法弄清楚我应该如何继续.. 你说你从数据库中获取结果。所以它可能类似于 dBConnectionHelper.INDEX_MYTABLE_COLUMN。如果您没有将复选框连接到任何数据库字段,则不必担心该部分,只需将其删除即可。设置光标适配器时,只需将数据库中的 _id 与布局中的复选框链接。这样您就可以使用 _id 稍后在您的数据库中执行 SQL 操作。 我更改了它以更好地适应您的情况 - 见上文 谢谢,但不确定我是否理解,或者我可能你没有......我将我的项目连接到数据库,而不是项目中的复选框部分。好的,我将编辑我的问题并提供我所拥有的代码示例

以上是关于在 Listview 中检索选中 CheckBoxes 的项目的主要内容,如果未能解决你的问题,请参考以下文章

如何获取listview里选中的checkbox

为啥当我在选中 CheckBox 的情况下滚动 ListView 时,它会变为未选中状态?

怎么获取listview 中checkbox的选中状态

Android中ListView包含CheckBox时滑动丢失选中状态的解决

Android入门第28天-ListView嵌套CheckBox在滚动时失去选中状态的问题

如何遍历并获取listview中checkbox是不是选中以及该项的id?