Listview's checked items not there after scrolling

时光总嘲笑我的痴心妄想 提交于 2019-12-19 04:35:12

问题


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 checkboxes retain their state after scrolling?


回答1:


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.




回答2:


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..




回答3:


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;
    }
}


来源:https://stackoverflow.com/questions/11930858/listviews-checked-items-not-there-after-scrolling

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!