我正在尝试为我的应用程序的用户提供选项,以更改他们希望其结果显示的方式。

我为每个视图创建了一个不同的布局项目,并从BaseAdapter进行了扩展,如下所示:

public View getView(int index, View recycledCompatibleView, ViewGroup parent)
{
    // Just in case the view can be reused
    View toReturn = recycledCompatibleView;
    if(toReturn == null)
    {
        LayoutInflater inflator = LayoutInflater.from(parent.getContext());
        toReturn = inflator.inflate(layoutId, null);
    }
    ...
}

public void setResultsListStyle(int layoutId)
{
    this.layoutId = layoutId;
}


调用notifyDataSetChanged()可以(通过调试观察到)刷新视图,因为新视图正在膨胀并从getView()方法返回。

但是屏幕上的视图没有改变...

有什么我想念的吗?

最佳答案

这里的问题是ListView可能会缓存已经膨胀的具有旧“格式”的View。您需要以某种方式重置此视图“缓存”。为此,您可以使用下一个技巧:

mListView.setAdapter(mListView.getAdapter());


而不是调用notifyDataSetChanged()

10-08 03:27