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

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