Как обновить содержимое 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(), чтобы найти представление, которое хотите обновить.