У меня есть страница 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();
});
Этот последний метод действительно работает и делает то, что я хочу, но просто задаюсь вопросом, является ли это хорошим способом 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);
}
});