Получить фрагмент из ViewPager - PullRequest
236 голосов
/ 09 января 2012

Я использую ViewPager вместе с FragmentStatePagerAdapter для размещения трех разных фрагментов:

  • [Fragment1]
  • [Fragment2]
  • [Фрагмент3]

Когда я хочу получить Fragment1 из ViewPager в FragmentActivity.

В чем проблема и как ее исправить?

Ответы [ 23 ]

0 голосов
/ 22 февраля 2017

Создание целочисленного идентификатора ресурса в /values/integers.xml

<integer name="page1">1</integer>
<integer name="page2">2</integer>
<integer name="page3">3</integer>

Затем в функции getItem PagerAdapter:

public Fragment getItem(int position) {

        Fragment fragment = null;

        if (position == 0) {
            fragment = FragmentOne.newInstance();
            mViewPager.setTag(R.integer.page1,fragment);

        }
        else if (position == 1) {

            fragment = FragmentTwo.newInstance();
            mViewPager.setTag(R.integer.page2,fragment);

        } else if (position == 2) {

            fragment = FragmentThree.newInstance();
            mViewPager.setTag(R.integer.page3,fragment);

        }

        return fragment;
        }

Затем в действии напишите эту функцию, чтобы получить ссылку на фрагмент:

private Fragment getFragmentByPosition(int position) {
    Fragment fragment = null;

    switch (position) {
        case 0:
            fragment = (Fragment) mViewPager.getTag(R.integer.page1);
            break;

        case 1:

            fragment = (Fragment) mViewPager.getTag(R.integer.page2);
            break;

        case 2:
            fragment = (Fragment) mViewPager.getTag(R.integer.page3);
            break;
            }

            return fragment;
    }

Получите ссылку на фрагмент, вызвав вышеуказанную функцию, а затем приведите ее к вашему пользовательскому фрагменту:

Fragment fragment = getFragmentByPosition(position);

        if (fragment != null) {
                    FragmentOne fragmentOne = (FragmentOne) fragment;
                    }
0 голосов
/ 30 июня 2016
Fragment yourFragment = yourviewpageradapter.getItem(int index);

index - это место фрагмента в адаптере, как вы добавили fragment1 сначала, так что получите fragment1 pass index как 0 и так далее для отдыха

0 голосов
/ 08 сентября 2015

Я реализовал это легко с немного другим подходом.

Мой пользовательский метод FragmentAdapter.getItem возвратил не новый MyFragment (), а экземпляр MyFragment, созданный в конструкторе FragmentAdapter.

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

...