更新 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 获取内容时,您得到的是正确的语言。 重新设置文本,就是这样。