Как инициализировать переменную на фрагменте, показанном с помощью FragmentStatePagerAdapter [duplicate]

>##    open command prompt with Run as Administrtor ##

    adb connect ipdevice:5037
3
задан Daniel Nugent 8 April 2016 в 19:12
поделиться

2 ответа

Использование ViewPager.OnPageChangeListener - правильный путь, но вам нужно будет немного реорганизовать ваш адаптер, чтобы сохранить ссылку на каждый фрагмент, содержащийся в FragmentPagerAdapter.

Вы используете это, используя [#]

 class PagerAdapter extends FragmentPagerAdapter {
        String tabTitles[] = new String[] { "One", "Two", "Three", "Four"};
        Context context;

        //This will contain your Fragment references:
        public Fragment[] fragments = new Fragment[tabTitles.length];

        public PagerAdapter(FragmentManager fm, Context context) {
            super(fm);
            this.context = context;
        }
        @Override
        public int getCount() {
            return tabTitles.length;
        }
        @Override
        public Fragment getItem(int position) {
            switch (position) {
            case 0:
                return new FragmentOne();
            case 1:
                return new FragmentTwo();
            case 2:
                return new FragmentThree();   
            case 3:
                return new FragmentFour();
            }
            return null;
        }

        //This populates your Fragment reference array:
        @Override
        public Object instantiateItem(ViewGroup container, int position) {
            Fragment createdFragment = (Fragment) super.instantiateItem(container, position);
            fragments[position]  = createdFragment;
            return createdFragment;
        }

        @Override
        public CharSequence getPageTitle(int position) {
            // Generate title based on item position
            return tabTitles[position];
        }         
 }

Затем вместо создания нового фрагмента используйте тот, который содержится в адаптере:

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

  @Override
  public void onPageSelected(int position) {

        // do this instead, assuming your adapter reference
        // is named mAdapter:
        Fragment frag = mAdapter.fragments[position];
        if (frag != null && frag instanceof FragmentTwo) {
          ((FragmentTwo)frag).sendGetRequest();
        }
  }

  @Override
  public void onPageScrollStateChanged(int state) {  }
});

Обратите внимание: если вы используете разные классы фрагментов в своем адаптере, вы можете реализовать интерфейс, который определяет sendGetRequest(), а в каждом из ваших классов фрагментов реализует метод sendGetRequest ().

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

if (frag instanceof FragmentTwo) {
    ((FragmentTwo)frag).sendGetRequest();
}
3
ответ дан Daniel Nugent 28 August 2018 в 01:03
поделиться

Вместо вызова метода sendGetRequest () в прослушивателе просмотра пейджера, вызовите свой запрос GET в методе onCreateView в вашем фрагменте фрагмента class_two. Причина этого заключается в том, что вы гарантируете, что все ваши представления в фрагментаторе были правильно инициализированы через события жизненного цикла фрагмента.

0
ответ дан Anthony Ng 28 August 2018 в 01:03
поделиться
Другие вопросы по тегам:

Похожие вопросы: