更新 ListView 页脚
Update ListView footer
我有一个 ListView
,其页脚 View
包含 TextView
可以根据 selected 语言动态更改。
当我 select 一种不同的语言时,我会更新我的 ListView
项:
mBaseAdapter.updateItems(items);
基础适配器:
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
根据语言selected翻译的,也可以增减在数量上。我的页脚永远不会改变,我只想要 View
更新以便翻译文本(选择正确的 value-(lang)/strings.xml)。
我的问题是,为什么第一种方法不起作用?我能想到的唯一解释是 invalidate();
不会再次调用 setText()
,它只会重绘 View
。它与 ListView
一起工作,因为适配器再次调用 getView()
,其中再次填充 TextViews
。这个假设是否正确?
谢谢。
该行为仅为预期。调用任何视图的 invalidate() 只会重新绘制已经存在的内容,除非更改发生在 canvas.
中,否则它不会更新
当您更改语言时,不会通知 footerView,因此它可以更改内容。因此,当您尝试从 strings.xml 获取内容时,您得到的是正确的语言。
重新设置文本,就是这样。
我有一个 ListView
,其页脚 View
包含 TextView
可以根据 selected 语言动态更改。
当我 select 一种不同的语言时,我会更新我的 ListView
项:
mBaseAdapter.updateItems(items);
基础适配器:
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
根据语言selected翻译的,也可以增减在数量上。我的页脚永远不会改变,我只想要 View
更新以便翻译文本(选择正确的 value-(lang)/strings.xml)。
我的问题是,为什么第一种方法不起作用?我能想到的唯一解释是 invalidate();
不会再次调用 setText()
,它只会重绘 View
。它与 ListView
一起工作,因为适配器再次调用 getView()
,其中再次填充 TextViews
。这个假设是否正确?
谢谢。
该行为仅为预期。调用任何视图的 invalidate() 只会重新绘制已经存在的内容,除非更改发生在 canvas.
中,否则它不会更新
当您更改语言时,不会通知 footerView,因此它可以更改内容。因此,当您尝试从 strings.xml 获取内容时,您得到的是正确的语言。
重新设置文本,就是这样。