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

时间:2015-06-30 11:09:49

标签: android android-layout android-fragments

我目前正在尝试创建一个tabView,其中每个标签打开不同的布局。我正在使用android.support.design.widget.TabLayout并使用适配器将其与pagerView成功链接。现在在myFragment类中,如果我调用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 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];
        }
    } 

3 个答案:

答案 0 :(得分:1)

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

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

对于解决方案,您必须为不同的位置返回不同的碎片,或者至少使用不同的布局。

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 Fragment标签示例: http://examples.javacodegeeks.com/android/core/app/fragment/android-fragment-tabs-example/

答案 1 :(得分:1)

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;

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

答案 2 :(得分:0)