以前的片段在新片段下可见

Squ*_*ire 22 android android-viewpager android-actionbar

我有一个标签+ ViewPager布局,在其中一个标签中我有一个列表视图.当我在onclick上替换该列表片段时,我仍然可以看到新片段下的旧片段.看到:

在此输入图像描述

码:

FragmentManager fragmentManager = getFragmentManager();
FragmentTransaction transaction = fragmentManager.beginTransaction();
HallsInStateFragment hallsForState = new HallsInStateFragment();        
transaction.replace(R.id.container, hallsForState);
transaction.addToBackStack(null);
transaction.commit();
Run Code Online (Sandbox Code Playgroud)

其中R.id.container是视图中的FrameLayout.

tar*_*pra 10

当需要从父视图中删除所有视图时,您需要在片段的onCreateView()方法中的容器中调用removeAllViews()

这是代码:

public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {

container.removeAllViews(); // Inflate the layout for this fragment
 return inflater.inflate(R.layout.fragment_example, container, false); 
}
Run Code Online (Sandbox Code Playgroud)

  • 接受的答案似乎不是有效的函数调用,如果您不依赖于 backstack 历史,这很有效。事情发生了变化,所以很高兴看到更新的答案,这样我们就不必随着 Android 的发展而创建重复的问题。感谢 taranjeetsapra! (2认同)

var*_*waj 8

而不是R.id.container像这样放置片段的id : ((ViewGroup)getView().getParent()).getId(). 实际上它不是替换片段而是替换先前的布局,即FrameLayout.它适用于我,我希望它也适用于你的情况.

  • getview方法没有定义 (3认同)
  • getId()未定义 (2认同)

apu*_*kar 5

将此添加到两个片段父布局

android:background="@android:color/white".

您正在替换的一个和您将替换的一个。

  • 这个答案只隐藏了旧的片段。使用仍然可以在旧fragment中制作点击事件。要禁用此功能,请在根视图中添加 `clickable = true` (3认同)