Android FragmentPagerAdapter с тем же классом фрагмента

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

Редактировать - моя главная проблема - найти позицию. Я могу использовать tabLayout.getSelectedTabPosition(), чтобы получить правильную позицию, если я нажму на вкладку, но если я прокручиваю между вкладками, viewpager обрабатывает это по-другому, и я не знаю, как найти позицию из этого.

public class PagerAdapter extends FragmentPagerAdapter {
    private int numTabs;

    public PagerAdapter(FragmentManager fm, int tabs) {
        super(fm);
        numTabs = tabs;
    }

    @Override
    public Fragment getItem(int position) {
        switch (position) {
            case 0:
                return makeScoreFrag(1, "Team 1");
            case 1:
                return makeScoreFrag(2, "Team 2");
            case 2:
                return makeScoreFrag(3, "Team 3");
            case 3:
                return makeScoreFrag(4, "Team 4");
            default:
                return null;
        }
    }

    @Override
    public int getCount() {
        return numTabs;
    }

    private ScoreFragment makeScoreFrag(int num, String title){
        Bundle bundle = new Bundle();
        bundle.putInt("score", 0);
        bundle.putInt("number", num);
        bundle.putString("title", title);
        ScoreFragment frag = new ScoreFragment();
        frag.setArguments(bundle);
        return frag;
    }
}

person Rand    schedule 13.09.2015    source источник
comment
Вы можете изучить, может ли добавление OnPageChangeListener для ViewPager для отслеживания выбранной страницы удовлетворить ваши потребности.   -  person headuck    schedule 13.09.2015


Ответы (1)


Вы можете переопределить метод instanceItem в FragmentPagerAdapter.

ScoreFragment[] fragments = new ScoreFragment[numTabs];
@Override
public Object instantiateItem(ViewGroup container, final int position) {
    fragments[position] = (ScoreFragment) super.instantiateItem(container, position);
   return fragments[position];
}

Тогда текущий фрагмент:

ScoreFragment curFragment = fragments[curTab];
person F.Will    schedule 13.09.2015