我有一个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);
}
});
答案 0 :(得分:1)
这是我找到的最简单的解决方案。尝试将片段放置在 FrameLayout 中,然后简单地显示/隐藏 FrameLayout
pdftools