【问题标题】:Update ListView footer更新 ListView 页脚
【发布时间】: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


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 2012-01-01
      • 2013-07-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多