动态改变片段的可见性

Dynamically change visibility of fragment

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

我读到在 activity 中更改片段的可见性是危险的,随后应该使用 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);
        }
    });

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

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

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