Как обновить содержимое ViewPager?
У меня есть это PageAdapter
с днями недели, для каждого пейджера у меня есть тот же макет. Моя проблема в том, как обновить правильный listView при смене дня. Когда я меняю день, Пейджер создает новый пейджер и удаляет другой, когда это происходит, мой список просмотра указывает на новый пейджер, но не на текущий. Например, это среда, и я сохраняю ссылку на просмотр списка, когда я изменяю на вторник, создается пейджер на понедельник, а четверг удаляется, и моя ссылка на последнюю страницу создается (понедельник), но я нахожусь во вторник.
Моя страница Адаптер:
ListView lvwConfig;
@Override
public Object instantiateItem(View pager, int position) {
LayoutInflater inflater = (LayoutInflater) mContext
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View v = inflater.inflate(R.layout.pager_layout, null);
lvwConfig = (ListView) v.findViewById(R.id.lvwConfig);
((ViewPager) pager).addView(v, 0);
return v;
}
Я хочу к ListView
всегда указывать на просмотр списка текущего элемента.
2 ответа
Читать этот пост: PagerAdapter
Вы можете реализовать эту функцию в PagerAdapter:
public int getItemPosition(Object object){
return POSITION_NONE;
}
после вы можете использовать эту функцию:
yourPagerAdapterObject.notifyDataSetChanged();
Этот метод плох, если у вас слишком много представлений для отображения. Все мнения всегда пересчитываются. Но в вашем случае для некоторых взглядов все нормально.
Переопределение getItemPosition в PagerAdapter проще, но немного более неэффективно. Таким образом, когда вы звоните notifyDataSetChanged()
, пейджер представлений удалит все представления и перезагрузит их все. Как таковой эффект перезагрузки получается. Был еще один вариант, который предложил alvarolb, это setTag()
метод в instantiateItem()
при создании нового представления. Тогда вместо использования notifyDataSetChanged()
, ты можешь использовать findViewWithTag()
чтобы найти представление, которое вы хотите обновить.