我目前正在尝试创建一个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];
}
}
答案 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)