Listview's checked items not there after scrolling

前端 未结 3 1308
挽巷
挽巷 2021-01-07 06:48

I have created a listview with textview and checkbox. However after scrolling the list down(or up) all the checked items in the list get unselected. How to make the checked

相关标签:
3条回答
  • 2021-01-07 07:09

    You can use this adapter class and get selected checkbox id by using listview.getPositionForView(cBox)

       public class aAdapter extends SimpleAdapter {
        //private List<Table> tables;
        SharedPreferences prefs;
        private Activity activity;
        String val = "";
    
        //@SuppressWarnings("unchecked")
        public aAdapter(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)+" Checked");
                    }
                    else
                    {
                          System.out.println("position "+reportslistview.getPositionForView(cBox)+" UnChecked");
                    }
                }
            });
            return row;
        }
    }
    
    0 讨论(0)
  • 2021-01-07 07:28

    ListView recycles the views every time it is scrolled. That's why the Check-boxes does not retain their states.

    To accomplish your task:

    • Store the checked items in an array.
    • When you click any checkbox in the listview, change the value of that particular item in the array.
    • Inside your getView method, check or uncheck the Check-boxes by reading the values from the array.

    That way your checkboxes will retain their states. I hope this is clear.

    0 讨论(0)
  • 2021-01-07 07:28

    You need to save the state of your list when you make any changes in the list. You have to maintain an arrayList of your checkedItems. This Post might prove to be more helpful in this regard..

    0 讨论(0)
提交回复
热议问题