更新ListView页脚

时间:2015-05-26 21:50:18

标签: android android-listview android-view android-view-invalidate

我的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 个答案:

答案 0 :(得分:1)

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