替换为新片段后,旧片段仍然可见

时间:2018-01-01 11:17:10

标签: android android-fragments

我知道这个主题有很多问题但没有一个能解决我的问题。我有一个带有viewpager的标签布局。此viewpager有5个片段。其中一个是“我的档案”。单击此片段中的任何项目时,将替换为另一个片段。但我的代码实际上并没有取代。新片段位于旧片段下方,两者都是可见的,显然顶部的片段是可点击的(旧片段)。一种解决方案包括将背景颜色设置为白色或其他颜色。我无法做到这一点,因为我的应用程序具有透明背景。

下面是截图:

enter image description here

下面是我替换片段的代码:

ready() {
  super.ready();
  var self = this;
  self.canvas = self.__canvas = new fabric.Canvas(self.$.convertCanvas);
  var height = window.innerHeight - 48;
  var width = window.innerWidth - 300;
  self.canvas.setHeight(height);
  self.canvas.setWidth(width);
  fabric.Image.fromURL('img/viper-board.png',function(oImg){
   oImg.set({
    left:10,
    top:10
   });
   self.canvas.add(oImg);
  });
}

2 个答案:

答案 0 :(得分:0)

首先,从片段开始片段是一种不好的做法。而不是在Activity中创建一个方法,

public void switchToSecondFragment(){

  FragmentManager manager = getSupportFragmentManager();
  SecondFragment fragment = new SecondFragment();
  FragmentTransaction transaction = manager.beginTransaction();
  transaction.replace(R.id.container, fragment).addToBackStack("tag");
  transaction.commit();

}

当您想要启动Second Fragment时,请将其作为

启动
((MyActivity) getActivity()).startSecondFragment(); 

答案 1 :(得分:0)

当我们动态替换片段时,较旧片段的所有子视图都会在较新片段的背景中显示(如果较新片段的背景颜色是透明的)。在这种情况下,我们应该对较旧的片段进行所有子视图以隐藏其可见性。

注意:在较旧的片段中隐藏子视图的可见性时,如果其他视图位置取决于子视图,则使用View.INVISIBLE而不是View.GONE进行隐藏。因为-

在[文档]中,您可以这样说

View.GONE 此视图是不可见的,并且不占用任何空间 布局目的。

View.INVISIBLE 此视图不可见,但仍会占用空间以用于布局。

因此,如果在视图依赖时使用View.GONE,则实际上是从布局中删除了它,这可能会干扰其他位置视图。