0

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

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

谁能教我如何在其 OnClickListener 回调中获取 CheckedTextView 的位置?

示例代码很感激。

提前致谢...

4

1 回答 1

3

列表视图会回收其视图,因此当您转到不同的页面然后返回上一页时,列表视图会为其视图调用 getView() 函数。为了确保检查视图的顺序没有混淆,请在初始化适配器之前创建一个包含所有视图的检查状态的数组列表。然后将 arraylist 作为适配器构造函数的参数传递。在那里,在 getView() 函数中,根据 arraylist 设置每个可检查文本视图的检查状态。然后,返回活动类并覆盖 onItemClick() 事件。使用调用函数时提供给您的视图,执行以下操作以获取可检查的文本视图并设置其检查状态:

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

} });

于 2011-07-19T21:09:42.100 回答