【问题标题】:Dynamically change visibility of fragment动态改变片段的可见性
【发布时间】:2018-02-16 20:30:30
【问题描述】:

当用户在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);
        }
    });

【问题讨论】:

    标签: java android android-fragments visibility


    【解决方案1】:

    这是我在使用ObjectAnimator 为嵌套片段设置动画然后切换其可见性时遇到的一个更大的问题。

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-06-07
      • 2018-10-05
      • 1970-01-01
      • 1970-01-01
      • 2023-04-04
      • 2020-08-13
      • 2020-11-21
      • 1970-01-01
      相关资源
      最近更新 更多