【问题标题】:Get checked items from ListView with check box使用复选框从 ListView 中获取选中的项目
【发布时间】:2012-08-09 11:43:55
【问题描述】:

我有一个ListViewCheckBox。我想从 ListView 中获取选定的项目,例如 MyFiles 应用程序,我们使用 CheckBox 选择多个文件,然后单击单个删除按钮删除所有文件。

【问题讨论】:

    标签: android android-widget android-listview android-checkbox


    【解决方案1】:
      boolean bulkflag = false;
      ListView reportslistview = (ListView) findViewById(android.R.id.list);
      public class MyAdapter extends SimpleAdapter {
        //private List<Table> tables;
        SharedPreferences prefs;
        private Activity activity;
        String val = "";
    
        //@SuppressWarnings("unchecked")
        public MyAdapter(Activity context, List<? extends Map<String, String>> tables, int resource, String[] from,
                int[] to) {
            super(context, tables, resource, from, to);
            //this.tables = (List<Table>) tables;
            activity    =   context;
        }
    
        public View getView(final int position, final View convertView, ViewGroup parent) {
            View row = super.getView(position, convertView, parent);
            if (row == null) 
            {
                LayoutInflater inflater = (LayoutInflater) activity
                        .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
                row = inflater.inflate(R.layout.reports_list, null);
            }       
    
            final CheckBox cBox=(CheckBox)row.findViewById(R.id.cb1);
            if(bulkflag)
            {
                cBox.setVisibility(View.VISIBLE);
            }
            else
            {
                cBox.setVisibility(View.GONE);
            }
            cBox.setOnClickListener(new OnClickListener() {
    
                public void onClick(View v) {
    
                    if(cBox.isChecked())
                    {
                        selectedIds.add(recIdArr.get(reportslistview.getPositionForView(cBox)));
                        //System.out.println("position "+reportslistview.getPositionForView(cBox));
                    }
                    else
                    {
                        selectedIds.remove(recIdArr.get(reportslistview.getPositionForView(cBox)));
                    }
                }
            });
            return row;
        }
    }
    

    检查 ====>

     for(int i=0;i<selectedIds.size();i++)
     {
        System.out.println("delete multiple"+selectedIds.size()+" "+Integer.parseInt(selectedIds.get(i)));
     }
    

    selectedIds声明为全局变量

    【讨论】:

    • 我应该在哪里声明这个数组“recIdArr”?
    • 它是一个数组列表,其中要添加到列表视图的项目列表
    • @Ramkiran 你能解释一下什么是reportslistview 和bulkflag 吗?
    • @Ramkiran int pos= listview.getPositionForView(cBox);给出了一个空指针异常...是什么导致了这里的问题?我已经初始化了列表视图,正如你在编辑中提到的那样!
    • 您是否将 cbox 声明为 CheckBox cBox=(CheckBox)row.findViewById(R.id.cb1);
    【解决方案2】:

    对我有用的非常简单的解决方案:

    像这样,您可以使用 ArrayAdapter 的现有 ArrayList 来遍历 ListView。

    for(int i = 0; i < ArrayList.size();i++){
    
    if((CheckBox)listView.getChildAt(i).findViewById(R.id.checkBox) != null){
    
        CheckBox cBox=(CheckBox)listView.getChildAt(i).findViewById(R.id.checkBox);
    
        if(cBox.isChecked()){
            Log.e("CB", ""+i);
        }
     }
    }  
    

    【讨论】:

      【解决方案3】:

      您需要将 OnClickListener 添加到您的复选框(在您的适配器中)。当按下按钮时,此侦听器必须与您要删除的文件保持最新列表。

      类似:

      选中 => 添加到列表
      未选中 => 从列表中删除

      【讨论】:

        【解决方案4】:
        Listview list;
        
        ArrayAdapter<String> aa=new ArrayAdapter<String>this,android.R.layout.simple_list_item_multiple_choice,"Arraylist name");
        
        list.setAdapter(aa);
        list.setOnItemClickListener(new OnItemClickListener() {
        
                public void onItemClick(AdapterView<?> arg0, View arg1,
                        int arg2, long arg3) {
             //code 
           }
        

        【讨论】:

          猜你喜欢
          • 2023-04-08
          • 1970-01-01
          • 2011-07-02
          • 1970-01-01
          • 2023-03-18
          • 1970-01-01
          • 1970-01-01
          • 2018-12-29
          • 1970-01-01
          相关资源
          最近更新 更多