【发布时间】: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 再次填充。这个假设正确吗?
谢谢。
【问题讨论】:
标签: android android-listview android-view android-view-invalidate