[英]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.