滚动后Listview检查的项目不存在

时间:2012-08-13 08:45:33

标签: android checkbox android-listview textview

我创建了一个带有textview和复选框的列表视图。但是,向下滚动列表(或向上)后,列表中的所有选中项目都将被取消选中。滚动后如何使选中的复选框保持其状态?

3 个答案:

答案 0 :(得分:2)

每次滚动时,ListView都会回收视图。这就是Check-box不保留状态的原因。

完成任务:

  • 将选中的项目存储在数组中。
  • 当您单击列表视图中的任何复选框时,请更改数组中该特定项目的值。
  • 在getView方法中,通过读取数组中的值来选中或取消选中复选框。

这样您的复选框将保留其状态。 我希望这很清楚。

答案 1 :(得分:0)

在列表中进行任何更改时,您需要保存列表的状态。您必须维护checkedItems的arrayList。在这方面, Post 可能会更有帮助。

答案 2 :(得分:0)

您可以使用此适配器类,并使用listview.getPositionForView(cBox)

获取选中的复选框ID
   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;
    }
}