Обновление нижнего колонтитула 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, вы получаете правильный язык. Задать текст снова, это способ сделать это.

Другие вопросы по тегам