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

发布于 2024-12-01 12:21:02 字数 706 浏览 0 评论 0原文

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

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

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

我缺少什么吗?

I'm trying to give the users of my app the option to change how they want their results displayed.

I've created a different layout item for each view and extended from BaseAdapter like so:

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

Calling notifyDataSetChanged() is (observable through debug) refreshing the view because the new view is being inflated and returned from getView() method.

However the view on screen is not changing...

Is there something I'm missing ?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

找回味觉 2024-12-08 12:21:02

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

mListView.setAdapter(mListView.getAdapter());

而不是调用 notifyDataSetChanged()

The problem here is that ListView may cache already inflated Views that are of old "format". You need to somehow reset this View "cache". For this you can use next trick:

mListView.setAdapter(mListView.getAdapter());

Instead of calling notifyDataSetChanged().

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文