Как закрыть текущий фрагмент с помощью кнопки, как кнопка "Назад"?
Я попытался закрыть текущий фрагмент с помощью Imagebutton.
Я нахожусь во Фрагменте-A, и когда я нажму кнопку, он превратится во Фрагмент-B.
И когда я нажимаю кнопку в Фрагменте-B, он поворачивается к Фрагменту-C и закрывает Фрагмент-B.
Если я нажму кнопку "Назад" на Fragment-C, он вернется к Fragment-A.
Код, который я пробовал, похож на следующий
camera_album = (ImageButton) view.findViewById(R.id.camera_album);
camera_album.setOnClickListener(new Button.OnClickListener() {
@Override
public void onClick(View v) {
closefragment();
Fragment fragment = FileBrowserFragment.newInstance(null, null, null) ;
MainActivity.addFragment(LocalFileBrowserFragment.this, fragment) ;
}
});
private void closefragment() {
getActivity().getFragmentManager().beginTransaction().remove(this).commit();
}
Когда я нажимаю кнопку "Назад" во фрагменте-B, она превращается во фрагмент-C.
Но когда я нажимаю кнопку "Назад" на Fragment-C, он не возвращается к Fragment-A. Вернемся к пустому фону. Если я хочу вернуться к Fragment-A, я должен нажать кнопку "Назад" еще раз.
ТАК, кажется, не закрывает текущий фрагмент завершен.
Как закончить текущий фрагмент, как кнопка возврата Android?
Ответы
Ответ 1
Из фрагмента A, чтобы перейти к B, замените A на B и используйте addToBackstack()
до commit()
.
Теперь из фрагмента B, чтобы перейти на C, сначала используйте popBackStackImmediate()
, это вернет A. Теперь замените A на C, как и на первую транзакцию.
Ответ 2
Я меняю код из getActivity().getFragmentManager().beginTransaction().remove(this).commit();
to
getActivity().getFragmentManager().popBackStack();
И он может закрыть фрагмент.
Ответ 3
Для тех, кому нужно найти простой способ
Попробуйте getActivity().onBackPressed();
Ответ 4
Попробуйте следующее:
ft.addToBackStack(null); // ft is FragmentTransaction
Итак, когда вы нажимаете back-key, текущая активность (которая содержит несколько фрагментов) будет загружать предыдущий фрагмент, а не заканчиваться.
Ответ 5
Это способ Kotlin, я создал кнопку в макете фрагмента, а затем установил onClickListner в onViewCreated.
согласно комментарию Вишванатха-Лекшманана
override fun onViewCreated(view: View?, savedInstanceState: Bundle?)
{
super.onViewCreated(view, savedInstanceState)
btn_FragSP_back.setOnClickListener {
activity?.onBackPressed()
}
}
Ответ 6
Попробуй это:
public void removeFragment(Fragment fragment){
android.support.v4.app.FragmentManager fragmentManager = getSupportFragmentManager();
android.support.v4.app.FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
fragmentTransaction.remove(fragment);
fragmentTransaction.commit();
}
Ответ 7
getActivity().onBackPressed
делает все, что вам нужно. Он автоматически вызывает метод onBackPressed в родительской активности.
Ответ 8
Button ok= view.findViewById(R.id.btSettingOK);
Fragment me=this;
ok.setOnClickListener( new View.OnClickListener(){
public void onClick(View v){
getActivity().getFragmentManager().beginTransaction().remove(me).commit();
}
});
Ответ 9
Вы можете попробовать эту логику, потому что она работает для меня.
frag_profile profile_fragment = new frag_profile();
boolean flag = false;
@SuppressLint("ResourceType")
public void profile_Frag(){
if (flag == false) {
FragmentManager manager = getFragmentManager();
FragmentTransaction transaction = manager.beginTransaction();
manager.getBackStackEntryCount();
transaction.setCustomAnimations(R.anim.transition_anim0, R.anim.transition_anim1);
transaction.replace(R.id.parentPanel, profile_fragment, "FirstFragment");
transaction.commit();
flag = true;
}
}
@Override
public void onBackPressed() {
if (flag == true) {
FragmentManager manager = getFragmentManager();
FragmentTransaction transaction = manager.beginTransaction();
manager.getBackStackEntryCount();
transaction.remove(profile_fragment);
transaction.commit();
flag = false;
}
else super.onBackPressed();
}
Ответ 10
Если вам нужно обработать действие более конкретно с помощью кнопки "Назад", вы можете использовать следующий метод:
view.setFocusableInTouchMode(true);
view.requestFocus();
view.setOnKeyListener(new View.OnKeyListener() {
@Override
public boolean onKey(View v, int keyCode, KeyEvent event) {
if( keyCode == KeyEvent.KEYCODE_BACK )
{
onCloseFragment();
return true;
} else {
return false;
}
}
});
Ответ 11
Пройдите учебник http://developer.android.com/guide/components/fragments.html
См. Опцию http://developer.android.com/reference/android/app/FragmentManager.html#popBackStack()
Ответ 12
Попробуй это
getActivity().finish();