2016-06-18 2 views
0

Я разработал приложение с тремя вкладками и одним действием, отображающим эти макеты. Всего у меня 3 фрагмента.вкладки без переднего плана, созданные при нажатии на другую вкладку

Я изучил множество учебников и использовал их. меня есть три фрагмента, и каждый из них имеет линию

return inflater.inflate(R.layout.tab_fragment_*, container, false);

* 1 или 2 или 3 в соответствии с которой фрагментом.

Я поставил точку останова на этой линии, но я увидел, что что-то происходит, что я не могу понять.

Когда я выбираю tab1 в режиме отладки, мой отладчик обращается к коду во фрагменте для tab2 !!!! Затем он набирает код в фрагменте для tab1, а затем показывает правильный результат. Когда я выбираю tab2, debuger удаляет код во фрагменте для tab3 !!!! Затем он показывает правильные результаты. Когда я выбираю tab3, мой отладчик не попадает ни в одну из точек останова, но показывает правильные результаты.

Помогите мне пожалуйста.

Я вижу правильные вещи, но я не могу этого понять. По этому поведению я не могу добавить какое-либо действие при нажатии кнопки на каждой вкладке (фрагмент в этом случае).

один из моих ссылок является: http://www.truiton.com/2015/06/android-tabs-example-fragments-viewpager/

ТАКЖЕ я использовал Android 2.2 API.

+0

вы используете вкладки с видом на пейджер или просто вкладки? –

+0

я использовал просмотр пейджера – AKronis1369

ответ

0

По умолчанию ViewPager создает только текущую страницу, а также экранные страницы слева и справа от текущей страницы.

(см http://www.androidzeitgeist.com/2012/10/examining-viewpager-2.html)

При нажатии на tab1, fragment1 создается (для отображения пользователю немедленно) и поэтому FRAGMENT2 (быть готовым к прокручиваться на экране в любой момент). Когда вы нажимаете на tab2, фрагмент2 уже существует (см. Предыдущий шаг) и сразу отображается, создается фрагмент3 (чтобы быть готовым к прокрутке на экране).

У вас может возникнуть искушение попробовать set the offscreen page limit до нуля, поэтому (теоретически) каждый фрагмент создается только тогда, когда он появляется на экране, но он не будет работать. Самый низкий закадровый предел страницы может быть равен 1.

Если вам нужно что-то делать с вкладкой, когда он будет выделен, вы можете попробовать что-то вроде этого:

viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() { 
    @Override 
    public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { 

    } 

    @Override public void onPageSelected(int position) { 
    Fragment selectedFragment = fragments.get(position)); 
    //do something here 
    } 

    @Override public void onPageScrollStateChanged(int state) { 

    } 
}); 
Смежные вопросы