1

我有一个列表视图,它已经按预期工作了一段时间。最近一个用户将他们的设备软件更新为 JellyBean,现在列表视图选择在按下时不会更新。

在后台,onTouchEvent() 方法触发,(反过来适配器的 onItemClick())并且选择设置为“幕后”,它根本不会显示为已选择。但是,如果设备现在被旋转并且方向改变,选择突出显示在重绘上!

我已经搜索了其他问题,我能找到的最接近的是 onAttachedToWindow() 方法被覆盖并且没有调用它的超级实现,但是这里不是这种情况!

有没有其他人在 JellyBean 上看到过类似的问题,并且知道解决方案?

4

2 回答 2

0

在每个选择上添加了对 adapter.notifyDataSetChanged() 的调用。

不理想,因为我怀疑大型数据集的性能会受到影响。

于 2013-02-05T00:39:20.400 回答
0

解决此问题的更好方法是使用 listview 的 invalidateViews() 函数。

ListView.invalidateViews()用于告诉 ListView 使其所有子项视图无效(重绘它们)。而Adapter.notifyDataSetChanged()是告诉适配器的观察者正在适应的内容已经改变。

在这种特殊情况下,ListView.invalidateViews() 似乎是一个更好的选择,因为您的数据集没有更新,您只需要重绘视图。

在您的 OnItemClick 中插入 listview.invalidateViews() 就可以了。

public void onItemClick(AdapterView<?> av, View v, int position,long id) {
            // TODO Auto-generated method stub
                    listview.invalidateViews();
            /*  YOUR   CODE 
                                GOES   HERE    */          
        }
    });

您也可以对 GridView 使用相同的功能。

于 2013-04-27T09:28:16.957 回答