2017-09-08 157 views
0

我想在Main Activity上单击button时动态更改fragment1的可见性。 fragment1被初始化为可见,但当按下按钮时,fragment1更改为隐藏。动态更改片段的可见性

我读过,改变活动中片段的可见性是危险的,随后应该用Fragment Manager来处理,例如。

FragmentManager fragmentManager = getFragmentManager(); 
    final FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); 
    final fragment_one fragment1 = new fragment_one(); 
    fragmentTransaction.add(R.id.fragment_container, fragment1); 
    fragmentTransaction.show(fragment1); //or .hide(fragment1); 
    fragmentTransaction.commit(); 

但是,我的理解是,一旦片段承诺已经有效地初始化,所以要改变其状态,需要将其替换,因此经过上述过程?这对于初步改变一些东西似乎非常麻烦。

显然,按钮需要在Main Activity,否则,如果可以切换可见性状态,则不可能从不可见状态恢复为可见状态。因此,我实现了以下功能,但它对片段没有影响 - 这正是我所怀疑的,因为我已经完成了这个片段。注意:在提交上面详述的片段之后,以下是Main Activity中的onCreate方法。

任何意见将非常感谢。

Button btn = (Button) findViewById(R.id.btn); 
    btn.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      fragmentTransaction.hide(fragment1); 
     } 
    }); 

回答

0

这是我与动画的嵌套片段与ObjectAnimator,然后切换其可见性面临的一个更大问题的一个问题。

对于任何试图切换片段可见性的人来说,您似乎只能更改fragmentTransaction.add(R.id.fragment_container, fragment1);参数中包含的ViewGroup的影响更改。在这种情况下,它会是fragment_container。因为这是rootView,所以改变这个就足够了,因为我想让整个卡消失。

同样值得注意的是,这应该是一个孩子的片段。因此,使用getFragmentManager是不正确的。我避免了getChildFragmentManager,因为我收到了一系列变得越来越复杂的错误。在更改ViewGroup后,我添加了我的子片段(将其更改为父代Fragment内的FrameLayout),这很快得到解决。