android 如何为嵌入在选项卡视图中的不同片段设置不同的布局

How to set different layouts for different fragments which is embedded inside a tab view in android

我目前正在尝试创建一个 tabView,其中每个选项卡打开不同的布局。我正在使用 android.support.design.widget.TabLayout 并使用适配器成功地将它与 pagerView 链接起来。现在在 myFragment class 中,如果我调用 onCreateView 并展开布局,布局 (fragment_main) 将显示在所有选项卡中。

public static class MyFragment extends Fragment {
        public MyFragment() {

        }

        public static MyFragment newInstance(int pageNumber) {
            MyFragment myFragment = new MyFragment();
            return myFragment;
        }


        public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
            View rootView = inflater.inflate(R.layout.fragment_main, container,false);

            return rootView;
        }
    }

我有 3 个片段连接 3 个选项卡。现在如何为每个片段设置不同的布局。

我的适配器 class 是

class MyPagerAdapter extends FragmentStatePagerAdapter {
        String[] tabs;
        public MyPagerAdapter(FragmentManager fm) {
            super(fm);
            tabs=getResources().getStringArray(R.array.tabs);
        }

        @Override
        public Fragment getItem(int position) {
            NavigationActivity.MyFragment myFragment = NavigationActivity.MyFragment.newInstance(position);
            return myFragment;
        }

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

        @Override
        public CharSequence getPageTitle(int position) {
            return tabs[position];
        }
    } 

请转到这个我认为这可以帮助你---- https://codeload.github.com/culmor30/android-fragments-example/zip/master

您正在为以下方法中的所有位置传递相同的片段,这导致了问题,

@Override
    public Fragment getItem(int position) {
        NavigationActivity.MyFragment myFragment = NavigationActivity.MyFragment.newInstance(position);
        return myFragment;
    }

对于解决方案,您必须 return 不同的片段用于不同的位置或至少具有不同的布局。

ArrayList< Fragment > tabFragments = new ArrayList<Fragment>();
fragments.add(new FragmentA());
fragments.add(new FragmentB());
fragments.add(new FragmentC());


@Override
public Fragment getItem(int position) {
    return tabFragments.get(position);
}

再次,

我发现下面提到的博客非常有用。那里描述了每个步骤。它正在使用 TabListener。如果实现与您正在寻找的不完全相同,但您可能会得到一个很好的概述,

Android 片段标签示例: http://examples.javacodegeeks.com/android/core/app/fragment/android-fragment-tabs-example/

在你的getItem()方法中写,

Fragment frgmt = null;

    switch (position) {
    case 0:

        frgmt = new fragment1(Context);
        break;
    case 1:

        frgmt = new fragment2(Context);
        break;
    case 2:

        frgmt = new fragment3(Context);
        break;

    default:
        break;
    }

    return frgmt;

然后创建这些片段及其各自的布局。