2

Я реализовал SlidingTabLayout в своем приложении, после https://github.com/google/iosched/blob/master/android/src/main/java/com/google/samples/apps/iosched/ui/widget/SlidingTabLayout.java и учебник для всех google. Все работает, но я не понимаю, почему, когда яSlidingTabLayout: зачем предварительно загружать следующую вкладку?

viewPager.setAdapter(viewPageAdapter); 
    slidingTabLayout.setViewPager(viewPager); 

автоматически вызываются:

getItem(0); 
    getItem(1); 

Вместо

getItem(0); 

это вкладка по умолчанию. Это как предварительная загрузка следующей вкладки для оптимизации производительности? Как я могу избежать этого?

ответ

3

Это как предварительная загрузка следующей вкладки для оптимизации производительности?

Да.

Как этого избежать?

Не использовать ViewPager. Идея, лежащая в основе ViewPager, заключается в том, что пользователь может прокручивать страницы. Это требует, чтобы страницы с обеих сторон текущей страницы загружались, поэтому анимация между страницами может происходить гладко.

+0

Итак, если я хочу использовать SlidingTab без предварительной загрузки, что я могу использовать вместо ViewPager? – helloimyourmind

+0

@helloimyourmind: Хорошо, что 'SlidingTabLayout' выглядит как индикатор для« ViewPager », поэтому вам тоже нужно будет найти замену. Или, исправить любую проблему, вызывает у вас беспокойство о двух страницах, загружаемых 'ViewPager'. – CommonsWare

+0

Я не знаю, как это исправить, потому что при загрузке второй и третьей страницы я занимаюсь разбором HTML-страниц, но это слишком медленный сервер, поэтому для открытия страницы требуется 7 секунд. – helloimyourmind

1

Не уверен, что это то, что вы ищете, но похоже, что вы хотели бы ограничить просмотры, загруженные с каждой стороны отображаемого вида.

Это может помочь:

//BEGIN_INCLUDE Fragment onViewCreated 
public void onViewCreated(View view, Bundle savedInstanceState) { 

    // BEGIN_INCLUDE (setup_viewpager) 
    // Get the ViewPager and set it's PagerAdapter so that it can display items 
    mViewPager = (ViewPager) view.findViewById(R.id.viewpager); 


    //setOffscreenPageLimit() allows the viewpager to maintain state as it's swiped. the chronometer will keep running as the page is swiped 
    //This may need to be adjusted as the app gets more tabs ADDED 3-31-15 
    mViewPager.setOffscreenPageLimit(8);//8 screens loaded and maintain state 

} 

Обратите внимание на метод setOffscreenPageLimit(). Попробуйте установить это 0 или 1.

Из документации (в классе, веб-сайт для разработчиков Android не предлагает такого рода специфичностью)

/** 
* Set the number of pages that should be retained to either side of the 
* current page in the view hierarchy in an idle state. Pages beyond this 
* limit will be recreated from the adapter when needed. 
* 
* This is offered as an optimization. If you know in advance the number 
* of pages you will need to support or have lazy-loading mechanisms in place 
* on your pages, tweaking this setting can have benefits in perceived smoothness 
* of paging animations and interaction. If you have a small number of pages (3-4) 
* that you can keep active all at once, less time will be spent in layout for 
* newly created view subtrees as the user pages back and forth. 
* 
* You should keep this limit low, especially if your pages have complex layouts. 
* This setting defaults to 1. 
* 
* @param limit How many pages will be kept offscreen in an idle state. 
*/ 

Вы можете экспериментировать, чтобы найти значение, которое вы хотите ,

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