Android ViewPager с несколькими классами фрагментов каждый с отдельным файлом макета - PullRequest
4 голосов
/ 05 февраля 2012

Мое приложение использует класс android.support.v4.view.ViewPager.Для каждой страницы в ViewPager я хочу, чтобы был один фрагмент, каждый со своим собственным файлом макета.Каждый фрагмент определяется в своем собственном файле.Мне трудно реализовать это.Для уточнения есть:

1 ViewPager4 файла фрагмента - FragmentOne.class, FragmentTwo.class, FragmentThree.class, FragmentFour.class4 XML-файла макета - frag_one.xml, frag_two.xml, frag_three.xml, frag_four.xml

Примеры, которые я видел, имеют дело только с одним файлом макета.

Вот моя FragmentActivity, гдеViewPager удерживается:

public class Main extends FragmentActivity {
    MyAdapter mAdapter;
    ViewPager mPager;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        mAdapter = new MyAdapter(getSupportFragmentManager());

        mPager = (ViewPager) findViewById(R.id.pager);
        mPager.setAdapter(mAdapter);

    }

    public static class MyAdapter extends FragmentPagerAdapter {
        public MyAdapter(FragmentManager fm) {
            super(fm);
        }

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

        @Override
        public Fragment getItem(int position) {
            return EditorFragment.newInstance(position);
        }
    }

}

Мой главный вопрос: как заставить адаптер MyAdapter распознавать четыре отдельных файла фрагмента и плавно перемещаться по ним с помощью ViewPager?Какие модификации я должен внести в getItem()?

Любая помощь приветствуется.

РЕДАКТИРОВАТЬ:

Итак, я попробовал то, что предложил Лулумея, и придумал следующее:

РЕДАКТИРОВАТЬ 2: Да, эти операторы перерыва это исправили.Это работает сейчас.Спасибо всем, кто помог!Теперь у меня есть хорошая сегрегация, спасибо.

    @Override
    public Fragment getItem(int position) {
        Fragment f = new Fragment();

        switch (position) {
        case 0:
            f = FragmentOne.newInstance(position);
                    break;
        case 1:
            f = FragmentTwo.newInstance(position);
                    break;
        case 2:
            f = FragmentThree.newInstance(position);
                    break;
        case 3:
            f = FragmentFour.newInstance(position);
                    break;
        }

        return f;
    }

Приложение запускается, что всегда является хорошим знаком, но застряло на макете четыре.Когда я пролистываю страницу справа, это также макет четыре для всех страниц.Я был уверен, чтобы изменить макет в инфлятор для каждого фрагмента.Я все еще собираюсь работать над этим.@lulumeya - Ты это имел ввиду?

1 Ответ

5 голосов
/ 05 февраля 2012

Просто верните соответствующий экземпляр фрагмента в getItem (int position) по позиции. используйте переключатель ~ чехол, это просто.

...