0

我有一个应用程序TabLayout/FragmentPagerAdapter来控制四个选项卡。其中三个选项卡正常工作并显示其各个片段(没有问题)。第四个片段间歇性地未能显示视图的内容。嵌套Android片段问题 - Intermitenting不显示

我已经测试过,视图的类已加载,但没有内容。片段确实包含嵌套片段(它们不再嵌套),我认为这可能会导致问题。以下是有问题的片段的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> 

以下是有关片段的类。

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(); 
} 
} 

只是要清楚。我遇到的问题是在Tabs之间切换一段时间之后。这个视图和这个视图本身将不再显示。 TabLayout似乎没有问题,因为它正在加载这个类。我希望有人能够提供一些解决这个问题的指导。

回答

2

您需要使用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(); 
} 
+0

谢谢。似乎现在正在完美工作。 –

+0

我的快乐:) –

0

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