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;
然后创建这些片段及其各自的布局。
我目前正在尝试创建一个 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;
然后创建这些片段及其各自的布局。