嵌套 Android 片段问题 - 间歇显示什么都没有

Nested Android Fragment Issue - Intermitenting shows nothing

我有一个带有 TabLayout / FragmentPagerAdapter 的应用程序来控制四个选项卡。其中三个选项卡工作正常并显示它们各自的片段(没有问题)。第四个片段,间歇性地无法显示视图的内容。

我已经测试过,视图的 class 已加载,但没有内容。片段确实包含嵌套片段(它们不再嵌套),我认为这可能是导致问题的原因。以下是有问题的片段的 XML。

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="match_parent">

<FrameLayout
    android:id="@+id/fragmentContainer"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:layout_gravity="center">

</FrameLayout>

</LinearLayout>

下面是相关片段的 class。

public class MyFragmentLayout extends Fragment {

View view;

SubFragment1 subFragment1 = new SubFragment1();
SubFragment2 subFragment2 = new SubFragment2();

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    view = inflater.inflate(R.layout.fragment_layout, container, false);

    FragmentTransaction fragmentTransaction = getFragmentManager().beginTransaction();
    fragmentTransaction.replace(R.id.fragmentContainer, subFragment1);
    fragmentTransaction.commit();

    return view;

}

public void showSubFragment2() {
    FragmentTransaction fragmentTransaction = getFragmentManager().beginTransaction();
    fragmentTransaction.setCustomAnimations(R.animator.slide_in_left, R.animator.slide_out_right);
    fragmentTransaction.replace(R.id.fragmentContainer, subFragment2);
    fragmentTransaction.commit();
}

public void showSubFragment1() {
    FragmentTransaction fragmentTransaction = getFragmentManager().beginTransaction();
    fragmentTransaction.setCustomAnimations(R.animator.slide_in_right, R.animator.slide_out_left);
    fragmentTransaction.replace(R.id.fragmentContainer, subFragment1);
    fragmentTransaction.commit();
}
}

澄清一下。我遇到的问题是在选项卡之间切换一段时间后。此视图,以及仅此视图,将不再显示。 TabLayout 似乎没有问题,因为它正在加载此 class。我希望有人能够提供一些解决这个问题的指导。

尝试调用 getChildFragmentManager() 而不是 getFragmentManager(),看看是否有帮助。

您需要使用 getChildFragmentManager() 而不是 getFragmentManager() 来放置和管理片段内的片段。

所以

public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    view = inflater.inflate(R.layout.fragment_layout, container, false);

    FragmentTransaction fragmentTransaction = getChildFragmentManager().beginTransaction(); 
    fragmentTransaction.replace(R.id.fragmentContainer, subFragment1);
    fragmentTransaction.commit(); 

    return view;

} 

public void showSubFragment2() { 
    FragmentTransaction fragmentTransaction = getChildFragmentManager().beginTransaction(); 
    fragmentTransaction.setCustomAnimations(R.animator.slide_in_left, R.animator.slide_out_right);
    fragmentTransaction.replace(R.id.fragmentContainer, subFragment2);
    fragmentTransaction.commit(); 
} 

public void showSubFragment1() { 
    FragmentTransaction fragmentTransaction = getChildFragmentManager().beginTransaction(); 
    fragmentTransaction.setCustomAnimations(R.animator.slide_in_right, R.animator.slide_out_left);
    fragmentTransaction.replace(R.id.fragmentContainer, subFragment1);
    fragmentTransaction.commit(); 
}