如何使用CheckedTextView访问ListView?

时间:2011-07-19 13:53:33

标签: android listview checkedtextview

我现在正在开发一个使用ListView的应用程序 在ArrayAdapter管理的每个项目上CheckedTextView 支持多种选择。我的ListView中的内容是动态的 表示,可以在运行时更改。现在我尝试使用 ListView.getCheckedItemPositions()获取所有选中的项目,因为我想要 保存所有已检查的位置,并在用户返回时自动检查它们 这个页面又来了。所以我需要为每个页面保存检查结果。

对于第一页,一切都按预期正常工作。但是当用户去的时候 另一个页面并做出一些选择,ListView返回的结果数组 包含一些从未检查过的位置。我不是为什么ListView有 这种奇怪的行为。即使对于实际上没有检查发生的页面也是如此 ListView给我一个结果,表明已经检查了一个项目。

任何可以教我如何获得CheckedTextView位置的人都可以 在其OnClickListener回调?

示例代码很受欢迎。

提前致谢...

1 个答案:

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

}     });