Android:tablayout/viewpager 个片段内的片段或 activity
Android: tablayout/viewpager fragments within fragment or activity
我在 Android 有一个项目正在进行。我的主 activity 中有一个大片段覆盖了整个屏幕。通常我会为用户使用的每个 ui 屏幕执行一个替换命令并为每个屏幕交换片段。
在我当前的版本中,我想放置一个包含三个不同片段的 tablayout/viewpager 组合,并且根据按下的选项卡,我将显示一个新片段。问题在于,tablayout 在另一个片段中显示了三个不同的片段。这甚至可能或推荐吗?如果我必须将其更改为新的 activity。导航抽屉会正常运行并在我加载 activity 时关闭,还是那里也会出现问题。
感谢您的帮助
是的,带有 viewPager 的 TabLayout 将在内存中维护它的不同片段。
因为在你的情况下只有 3 个选项卡,它不会影响你的内存性能,你可以使用 pagerAdapter。
您可以将单个片段重复用于其他选项卡,但正如我所说,因为只有 3 个选项卡,所以不会影响您的性能。
是的,你可以在你的主片段中使用 tabLayout,你的主片段是你 activity 的一部分,它会遵循与托管 activity 相同的生命周期,除了少数其他回调.
您可以查看以下官方文档或使用我的演示代码段:
https://developer.android.com/reference/android/support/v4/app/FragmentTabHost.html
尝试这样做来处理主要片段中的标签:
public class MainFragment extends Fragment {
private FragmentTabHost mTabHost;
//Mandatory Constructor
public MainFragment() {
}
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.fragment_tabs,container, false);
mTabHost = (FragmentTabHost)rootView.findViewById(android.R.id.tabhost);
mTabHost.setup(getActivity(), getChildFragmentManager(), R.id.realtabcontent);
mTabHost.addTab(mTabHost.newTabSpec("fragmentb").setIndicator("Fragment B"),
FragmentB.class, null);
mTabHost.addTab(mTabHost.newTabSpec("fragmentc").setIndicator("Fragment C"),
FragmentC.class, null);
mTabHost.addTab(mTabHost.newTabSpec("fragmentd").setIndicator("Fragment D"),
FragmentD.class, null);
return rootView;
}
}
使用此选项卡布局:
<android.support.v4.app.FragmentTabHost
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@android:id/tabhost"
android:layout_width="match_parent"
android:layout_height="match_parent">
<LinearLayout
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<FrameLayout
android:id="@+id/realtabcontent"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"/>
</LinearLayout>
我在 Android 有一个项目正在进行。我的主 activity 中有一个大片段覆盖了整个屏幕。通常我会为用户使用的每个 ui 屏幕执行一个替换命令并为每个屏幕交换片段。
在我当前的版本中,我想放置一个包含三个不同片段的 tablayout/viewpager 组合,并且根据按下的选项卡,我将显示一个新片段。问题在于,tablayout 在另一个片段中显示了三个不同的片段。这甚至可能或推荐吗?如果我必须将其更改为新的 activity。导航抽屉会正常运行并在我加载 activity 时关闭,还是那里也会出现问题。
感谢您的帮助
是的,带有 viewPager 的 TabLayout 将在内存中维护它的不同片段。
因为在你的情况下只有 3 个选项卡,它不会影响你的内存性能,你可以使用 pagerAdapter。
您可以将单个片段重复用于其他选项卡,但正如我所说,因为只有 3 个选项卡,所以不会影响您的性能。
是的,你可以在你的主片段中使用 tabLayout,你的主片段是你 activity 的一部分,它会遵循与托管 activity 相同的生命周期,除了少数其他回调.
您可以查看以下官方文档或使用我的演示代码段: https://developer.android.com/reference/android/support/v4/app/FragmentTabHost.html
尝试这样做来处理主要片段中的标签:
public class MainFragment extends Fragment {
private FragmentTabHost mTabHost;
//Mandatory Constructor
public MainFragment() {
}
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.fragment_tabs,container, false);
mTabHost = (FragmentTabHost)rootView.findViewById(android.R.id.tabhost);
mTabHost.setup(getActivity(), getChildFragmentManager(), R.id.realtabcontent);
mTabHost.addTab(mTabHost.newTabSpec("fragmentb").setIndicator("Fragment B"),
FragmentB.class, null);
mTabHost.addTab(mTabHost.newTabSpec("fragmentc").setIndicator("Fragment C"),
FragmentC.class, null);
mTabHost.addTab(mTabHost.newTabSpec("fragmentd").setIndicator("Fragment D"),
FragmentD.class, null);
return rootView;
}
}
使用此选项卡布局:
<android.support.v4.app.FragmentTabHost
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@android:id/tabhost"
android:layout_width="match_parent"
android:layout_height="match_parent">
<LinearLayout
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<FrameLayout
android:id="@+id/realtabcontent"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"/>
</LinearLayout>