Как закрыть текущий фрагмент с помощью кнопки, как кнопка Назад?
Я пытаюсь закрыть текущий фрагмент с помощью Imagebutton.
Я нахожусь в фрагменте-A, и он превратится в Фрагмент-B, Когда я нажму кнопку.
и когда я нажимаю кнопку на фрагмент-B, он повернется к фрагменту-C и закроет фрагмент-B.
если я нажму кнопку назад на фрагменте-C , он вернется к фрагменту-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.
но когда я нажимаю кнопку назад на фрагменте-C , он не возвращается к фрагменту-A.
Он вернулся к пустому фону. Если я хочу вернуться к фрагменту-A, мне нужно еще раз нажать кнопку "Назад".
Итак, похоже, что текущий фрагмент не закрывается полностью.
Как закончить текущий фрагмент, как кнопка Назад Android ?
11 ответов:
из фрагмента A, чтобы перейти к B, замените A на B и используйте
addToBackstack()доcommit().Теперь из фрагмента B, чтобы перейти к C, сначала используйте
popBackStackImmediate(), это вернет A. теперь замените A на C, как и первая транзакция.
изменить код
getActivity().getFragmentManager().beginTransaction().remove(this).commit();до
getActivity().getFragmentManager().popBackStack();и он может закрыть фрагмент.
попробуйте это:
ft.addToBackStack(null); // ft is FragmentTransactionИтак, когда вы нажимаете back-key текущая деятельность (которая содержит несколько фрагментов) будет загружать предыдущий фрагмент, а не само производство.
Это Котлин способ сделать это, я создал кнопку в макете фрагмента, а затем установить onClickListner в onViewCreated.
согласно комментарию @ Viswanath-Lekshmanan
override fun onViewCreated(view: View?, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) btn_FragSP_back.setOnClickListener { activity.onBackPressed() } }
попробуйте это:
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(); }
Если вам нужно обработать действие более конкретно с помощью кнопки назад, вы можете использовать следующий метод:
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; } } });
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(); } });
вы можете попробовать эту логику, потому что он работал для меня.
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(); }
getActivity().onBackPressedделает все, что вам нужно. Он автоматически вызывает onBackPressed метод в Родительском действии.
Comments