更新 ListView 页脚

Posted

技术标签:

【中文标题】更新 ListView 页脚【英文标题】:Update ListView footer 【发布时间】:2015-08-08 18:39:14 【问题描述】:

我有一个ListView,其页脚View 包含一个TextView,可以根据所选语言动态更改。 当我选择不同的语言时,我会更新我的 ListView 项目:

mBaseAdapter.updateItems(items);

BaseAdapter

public void updateItems(List<Map.Entry<Integer, String>> items) 
        mItemsResIdList = new ArrayList<>(items);
        notifyDataSetChanged();

为了更新我的页脚,我这样做了:

mListViewFooter.invalidate();

这不起作用,文本没有改变。但是,如果我将 invalidate(); 替换为:

((TextView)mListViewFooter.findViewById(R.id.myTextView)).setText(R.string.myCopy);

注意:我的ListView元素是TextViews,根据选择的语言进行翻译,数量也可以增加或减少。我的页脚永远不会改变,我只想更新 View 以便翻译文本(选择正确的 value-(lang)/strings.xml)。我的问题是,为什么第一种方法不起作用?我能想到的唯一解释是invalidate(); 不会再次调用setText(),它只会重绘View。它与ListView 一起工作,因为适配器再次调用getView(),其中TextViews 再次填充。这个假设正确吗? 谢谢。

【问题讨论】:

【参考方案1】:

这种行为只是预期的。调用任何视图的 invalidate() 只会重新绘制已经存在的内容,除非更改在画布中,否则它不会更新。 当您更改语言时,不会通知footerView,以便它可以更改内容。因此,当您尝试从 strings.xml 获取内容时,您将获得正确的语言。 重新设置文本,就是这样做的方法。

【讨论】:

以上是关于更新 ListView 页脚的主要内容,如果未能解决你的问题,请参考以下文章

我在 android 版本 4.3 中为 listview 跨应用程序使用 listview 添加/删除页脚?

如何在ListView中添加页脚?

如何在 ListView 中添加页脚?

如何使最后一个页脚固定(ListView)

Espresso:单击 ListView 页脚中按钮的操作

UWP ListView 快速返回页脚