在第二次单击TextView时折叠片段。显示片段onClick,但不会在第二次单击时将其隐藏

时间:2020-05-01 12:28:50

标签: java android

我有一个Activity页面,其中包含4个不同的元素,这些都是我在其各自标题下为其创建的容器的片段。 OnClick我想打开该片段,然后再次单击它的标题,我希望该片段关闭。

由于某种原因,我编写的代码正在打开该片段,就像应该在标题正下方一样,但是第二次单击标题应该关闭/隐藏/折叠该片段却没有执行所以。

我不确定我应该在findViewById中查找容器还是实际的片段名称...将其作为实际容器而不是片段名称是有意义的。

我应该进行哪些修改才能使其正常工作?

SettingsActivity

mPrivacy.setOnClickListener(v -> {
            FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction();
            fragmentTransaction.add(R.id.container_privacy, new PrivacyFragment(), null).addToBackStack(null).commit();

            Fragment fragment = getSupportFragmentManager().findFragmentById(R.id.container_privacy);
            if (fragment != null)
                if (fragment.isVisible()) {
                    fragmentTransaction.hide(fragment).commit();
                } else {
                    fragmentTransaction.show(fragment).commit();
                }
        });

        mSecurity.setOnClickListener(v -> {
            //Create Security Fragment
        });

        mHelp.setOnClickListener(v -> {
            //Create Help Fragment
        });

        mAbout.setOnClickListener(v -> {
            //Create About Fragment
        });

        getUserInfo();
    }

我也一直在尝试这样,但是在打开后仍然不会关闭。

第二种方法

 mPrivacy.setOnClickListener(v -> {


   FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction();
    fragmentTransaction.add(R.id.container_privacy, new PrivacyFragment(), null).addToBackStack(null);
    Fragment fragment = getSupportFragmentManager().findFragmentById(R.id.container_privacy);
    if (fragment != null) {
        if (fragment.isHidden()) {
            fragmentTransaction.show(fragment);
        } else {
            fragmentTransaction.hide(fragment);
        }
    }
    fragmentTransaction.commit();
});

最后一个方法实际上可以工作并且可以完成我想要的事情,但是只是想知道这是否是一个很好的方法。看过一些帖子说不与Visibility混为一谈。想知道为什么吗?有关系吗?

第三种方法

mPrivacy.setOnClickListener(v -> {
            FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction();
            fragmentTransaction.add(R.id.container_privacy, new PrivacyFragment(), null).addToBackStack(null).commit();

            if (mFrameLayout.getVisibility() == View.GONE) {
                mFrameLayout.setVisibility(View.VISIBLE);
            } else {
                mFrameLayout.setVisibility(View.GONE);
            }
        });

1 个答案:

答案 0 :(得分:1)

这是我找到的最简单的解决方案。尝试将片段放置在 FrameLayout 中,然后简单地显示/隐藏 FrameLayout

pdftools