【问题标题】:How to set different layouts for different fragments which is embedded inside a tab view in android如何为嵌入在android标签视图中的不同片段设置不同的布局
【发布时间】:2015-06-30 11:09:48
【问题描述】:

我目前正在尝试创建一个 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 个片段(子类)和 3 个布局(xml)文件
  • @MuhammadBabar 你能给个代码sn-p

标签: android android-layout android-fragments


【解决方案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 片段标签示例: http://examples.javacodegeeks.com/android/core/app/fragment/android-fragment-tabs-example/

【讨论】:

    【解决方案2】:

    在您的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;
    

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

    【讨论】:

    • 它必须写在你的适配器类中
    • @lijo050,欢迎你
    【解决方案3】:

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-10-26
      • 1970-01-01
      • 2014-05-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多