在应用程序执行期间更改链接到ListView的适配器中的项目视图

时间:2011-08-25 12:38:41

标签: android listview baseadapter

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

我为每个视图创建了一个不同的布局项,并从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()方法返回。

然而,屏幕上的视图没有改变......

我有什么遗失的吗?

1 个答案:

答案 0 :(得分:2)

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

mListView.setAdapter(mListView.getAdapter());

而不是调用notifyDataSetChanged()