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>