我创建了一个带有textview和复选框的列表视图。但是,向下滚动列表(或向上)后,列表中的所有选中项目都将被取消选中。滚动后如何使选中的复选框保持其状态?
答案 0 :(得分:2)
每次滚动时,ListView都会回收视图。这就是Check-box不保留状态的原因。
完成任务:
这样您的复选框将保留其状态。 我希望这很清楚。
答案 1 :(得分:0)
在列表中进行任何更改时,您需要保存列表的状态。您必须维护checkedItems的arrayList。在这方面, Post 可能会更有帮助。
答案 2 :(得分:0)
您可以使用此适配器类,并使用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;
}
}