Обновление нижнего колонтитула ListView
У меня есть 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
обновите, чтобы текст переводился (выбирается правильное значение -(lang)/strings.xml).
Мой вопрос: почему первый подход не работает? Единственное объяснение, которое я могу придумать, заключается в том, что invalidate();
не вызывает setText()
опять же, это только перерисовывает View
, Сработало с ListView
потому что адаптер вызывает getView()
опять где TextViews
снова заселены. Это предположение верно?
Благодарю.
1 ответ
Поведение ожидается только. Вызов invalidate() любого представления просто перерисовывает содержимое, которое там уже есть, оно не будет обновляться, если изменение не находится на холсте.
Когда вы меняете язык, footerView не уведомляется, так что он может изменить содержимое. Поэтому, когда вы пытаетесь получить содержимое из strings.xml, вы получаете правильный язык. Задать текст снова, это способ сделать это.