У меня была аналогичная проблема ... Я использовал слушателей. Тем не менее, когда вы проводите две страницы назад к спине это было лага ... Я сделал что-то подобное, что улучшило опыт ....
viewpager.setOnPageChangeListener(new OnPageChangeListener() {
int positionCurrent;
boolean dontLoadList;
@Override
public void onPageScrollStateChanged(int state) {
if(state == 0){ // the viewpager is idle as swipping ended
new Handler().postDelayed(new Runnable() {
public void run() {
if(!dontLoadList){
//async thread code to execute loading the list...
}
}
},200);
}
}
}
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
positionCurrent = position;
if(positionOffset == 0 && positionOffsetPixels == 0) // the offset is zero when the swiping ends{
dontLoadList = false;
}
else
dontLoadList = true; // To avoid loading content for list after swiping the pager.
}
}
Если взять несколько милли секунд, чтобы загрузить список, который поставляется в дополнение к viewpager, его одобрение с точки зрения UX, а не плохое тестирование. Итак, идея состоит в том, чтобы дождаться 400 мс в потоке перед загрузкой списка и убедиться, что вы фактически не загружаете контент, когда пользователь пытаясь быстро прокрутить, чтобы увидеть содержимое viewpager ...
Я прокомментировал вызов setAdapter, и он был более плавным. onPageSelected - хорошая идея, но я получаю только номер позиции, как получить текущий экземпляр Fragment – metinkale38
@ metinkale38. В зависимости от того, какой тип адаптера вы используете, см. два первых ответа в этом вопросе http://stackoverflow.com/questions/7379165/update-data-in-listfragment-as-part-of-viewpager? answertab = votes # tab-top – Luksprog
спасибо OnPageChangeListener - хорошая идея, более гладкая, чем раньше, если я не пропустил сразу 2 страницы после друг друга. По вашей ссылке я нашел эту ссылку: http://tamsler.blogspot.nl/2011/11/android-viewpager-and-fragments-part-ii.html, и я использовал второй метод для получения экземпляра фрагмента – metinkale38