【问题标题】:Android ViewPager w/ multiple Fragment classes each w/ separate layout file带有/多个片段类的Android ViewPager,每个带有/单独的布局文件
【发布时间】:2012-02-05 12:18:55
【问题描述】:

我的应用使用android.support.v4.view.ViewPager 类。对于 ViewPager 中的每一页,我希望有一个片段,每个片段都有自己的布局文件。每个片段都在其自己的文件中定义。我很难实现这一点。为了澄清,有:

1 ViewPager
4 个片段文件 - FragmentOne.class、FragmentTwo.class、FragmentThree.class、FragmentFour.class
4 个 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 识别四个单独的 Fragment 文件并使用 ViewPager 顺利翻页?我应该对getItem()进行哪些修改?

感谢任何帮助。

编辑:

所以,我尝试了 lulumeya 的建议并想出了这个:

编辑 2:是的,那些 break 语句修复了它。现在可以了。感谢所有帮助过的人!现在我有一个很好的隔离,谢谢。

    @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;
    }

应用程序启动,这始终是一个好兆头,但卡在布局四上。当我向右翻页时,它也是布局四,适用于所有页面。我肯定会为每个 Fragment 更改充气机中的布局。我仍将继续努力。 @lulumeya - 这是你的意思吗?

【问题讨论】:

  • 您忘记在每行 f = Fragment... 后添加 break

标签: android android-fragments android-viewpager


【解决方案1】:

只需按位置在 getItem(int position) 中返回正确的 Fragment 实例。 用switch~case,很简单。

【讨论】:

  • 片段 f = new Fragment(); => 片段 f = null;只需声明。
  • @lulumeya:但是如果任何片段有更多片段怎么办?如果 fragmentOne 有 fragmentOneA 那么?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-12-22
  • 2020-08-31
  • 1970-01-01
  • 2016-03-31
  • 2011-12-27
  • 1970-01-01
相关资源
最近更新 更多