我现在正在开发一个使用ListView的应用程序 在ArrayAdapter管理的每个项目上CheckedTextView 支持多种选择。我的ListView中的内容是动态的 表示,可以在运行时更改。现在我尝试使用 ListView.getCheckedItemPositions()获取所有选中的项目,因为我想要 保存所有已检查的位置,并在用户返回时自动检查它们 这个页面又来了。所以我需要为每个页面保存检查结果。
对于第一页,一切都按预期正常工作。但是当用户去的时候 另一个页面并做出一些选择,ListView返回的结果数组 包含一些从未检查过的位置。我不是为什么ListView有 这种奇怪的行为。即使对于实际上没有检查发生的页面也是如此 ListView给我一个结果,表明已经检查了一个项目。
任何可以教我如何获得CheckedTextView位置的人都可以 在其OnClickListener回调?
示例代码很受欢迎。
提前致谢...
答案 0 :(得分:3)
listview会回收其视图,因此当您转到其他页面然后返回上一页时,listview会调用其视图的getView()函数。要确保已检查视图的顺序没有混淆,请在初始化适配器之前创建一个包含所有视图的检查状态的arraylist。然后传递arraylist作为适配器构造函数的参数。在getView()函数中,根据arraylist设置每个可检查textview的选中状态。然后,返回活动类并覆盖onItemClick()事件。使用调用函数时提供给您的视图,执行以下操作以获取可检查的textview并设置其已检查状态:
listView1.setOnItemClickListener(new OnItemClickListener()
{
@Override
public void onItemClick(AdapterView<?> arg0, View selectedView, int position , long id)
{
CheckedTextView tv = (CheckedTextView)selectedView.findViewById(R.id.textview);
if (tv.isChecked())
{
tv.setChecked(false);
checkStatesOfViews.get(position) = false;
}
else
{
tv.setChecked(true);
checkStatesOfViews.get(position) = true;
}
} });