2012-05-16 4 views
9

У меня есть этот PageAdapter с днями недели, для каждого пейджера у меня такой же макет. Моя проблема заключается в том, как обновить правильный listView при изменении дня. Когда я меняю день, пейджер создает новый пейджер и удаляет другие, когда это произошло, мой список указывает на новый пейджер, но не на текущий. Например, это wedniday, и я сохраняю ссылку на список, когда меняю на вторник пейджер месяца, и четверг удаляется, а моя точка ссылки на последнюю страницу создается (понедельник), но я во вторник.Как обновить содержимое ViewPager?

Мой pageAdapter:

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 всегда указывают на ListView текущего элемента.

+0

http://stackoverflow.com/questions/33012056/view-pager-first-and-second-fragment-data-is-not-updating-when-data-changed-in-a –

ответ

39

Прочитайте этот пост: PagerAdapter

Вы можете реализовать эту функцию в PagerAdapter:

public int getItemPosition(Object object){ 
    return POSITION_NONE; 
} 

после, вы можете использовали эту функцию:

yourPagerAdapterObject.notifyDataSetChanged(); 

Этот метод плохо, если у вас есть слишком много просмотров. Все взгляды всегда пересчитываются. Но в вашем случае, для некоторых просмотров, все в порядке.

+0

см. Сообщение http : //stackoverflow.com/questions/33012056/view-pager-first-and-second-fragment-data-is-not-updating-when-data-changed-in-a –

5

Переопределение getItemPosition в PagerAdapter проще, но бит более неэффективен. Таким образом, когда вы вызываете notifyDataSetChanged(), пейджер представления удаляет все виды и перезагружает их все. Так получается эффект перезарядки. Был другой вариант, который suggested by alvarolb, является setTag() метод в instantiateItem() при создании нового представления. Затем вместо notifyDataSetChanged() вы можете использовать findViewWithTag(), чтобы найти представление, которое хотите обновить.

Смежные вопросы