繁体   English   中英

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

[英]Collapse fragment on second time TextView is clicked. Shows fragment onClick, but doesn't hide it on 2nd click

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

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

我不确定我是否应该在findViewById中查找容器或实际的片段名称......它是实际的容器而不是片段名称是有意义的。

我应该修改什么才能使这项工作?

设置活动

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();
});

这最后一种方法实际上有效并且做了我想要它做的事情,但只是想知道它是否是 go 关于它的好方法。 看过一些帖子说不要弄乱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);
            }
        });

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

            <FrameLayout
            android:layout_width="match_parent"
            android:visibility="gone"
            android:id="@+id/frame_id"
            android:layout_height="wrap_content">
            <fragment
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_gravity="center"/>
        </FrameLayout>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM