我的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
。这个假设是否正确?
感谢。
答案 0 :(得分:1)
此行为仅限预期。调用任何视图的invalidate()只会重新绘制已经存在的内容,除非更改在画布中,否则它不会更新。
更改语言时,不会通知footerView,以便更改内容。因此,当您尝试从strings.xml获取内容时,您将获得正确的语言。
再次设置文本就是这样做的方法。