更新 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 页脚的主要内容,如果未能解决你的问题,请参考以下文章