我创建了一个带有文本视图和复选框的列表视图。但是,在向下(或向上)滚动列表后,列表中的所有选中项目都将被取消选择。如何使选中的复选框在滚动后保持其状态?
问问题
2481 次
3 回答
3
ListView 每次滚动时都会回收视图。这就是复选框不保留其状态的原因。
要完成您的任务:
- 将选中的项目存储在数组中。
- 当您单击列表视图中的任何复选框时,更改数组中该特定项目的值。
- 在您的 getView 方法中,通过读取数组中的值来选中或取消选中复选框。
这样,您的复选框将保留其状态。我希望这很清楚。
于 2012-08-13T09:30:16.240 回答
0
当您对列表进行任何更改时,您需要保存列表的状态。您必须维护您的checkedItems 的arrayList。在这方面,这篇文章可能会更有帮助。
于 2012-08-13T08:57:24.680 回答
0
您可以使用此适配器类并通过使用获取选定的复选框 idlistview.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;
}
}
于 2012-08-13T09:00:17.527 回答