Как обновить содержимое ViewPager?
У меня есть этот PageAdapter
с днями недели, для каждого пейджера у меня тот же макет. Моя проблема заключается в том, как обновить правильный listView при изменении дня. Когда я меняю день, пейджер создает новый пейджер и удаляет другие, когда это произошло, мой список указывает на новый пейджер, но не на текущий. Например, это wedniday, и я сохраняю ссылку на список, когда я меняю на вторник пейджер в понедельник, и четверг удаляется, а моя точка ссылки на последнюю страницу создается (понедельник), но я во вторник.
Моя страницаАдаптер:
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
всегда указывал на список текущего элемента.
Ответы
Ответ 1
Прочитайте это сообщение: PagerAdapter
Вы можете реализовать эту функцию в PagerAdapter:
public int getItemPosition(Object object){
return POSITION_NONE;
}
после, вы можете использовать эту функцию:
yourPagerAdapterObject.notifyDataSetChanged();
Этот метод является плохим, если у вас слишком много просмотров для отображения. Все взгляды всегда пересчитываются. Но в вашем случае, для некоторых просмотров, все в порядке.
Ответ 2
Переопределение getItemPosition в PagerAdapter проще, но бит более неэффективен.
Таким образом, когда вы вызываете notifyDataSetChanged()
, пейджер представления удаляет все виды и перезагружает их все. Так получается эффект перезарядки.
Был еще один вариант, который предложенный alvarolb, - это метод setTag()
в instantiateItem()
при создании нового представления. Затем вместо notifyDataSetChanged()
вы можете использовать findViewWithTag()
, чтобы найти представление, которое хотите обновить.