我有4个片段。它们由HomeFragment、Rainfall、rainday和yieldFragment组成。如果现在我在降雨片段上,那么我按下后退键,我想片段将回到Home片段(作为默认值)。但现在我的应用情况是,当按下后退键时,申请已关闭。我尝试过使用onBackpressed,但我认为我的onBackpressed不能正常工作。
在这种情况下我该怎么办?任何人都可以回答。我试过了…… public void onBackPressed() {
fragment=new HomeFragment();}
如果我没弄错的话,您所要做的就是将以下代码行粘贴到相关片段的onViewCreated fun中。
val callback = object : OnBackPressedCallback(true){
override fun handleOnBackPressed() {
"your_code_here"
"If you leave this blank, the back button will not work."
}
}
requireActivity().onBackPressedDispatcher.addCallback(callback)
- 首先在切换到fragment时,使用#replace而不是#添加新的片段从您的容器活动
-
second within your #inner fragments,重写onResume(在下面。它会给你回叫设备返回按钮
@Overridepublic void onResume() {
super.onResume(); getView().setFocusableInTouchMode(true); getView().requestFocus(); getView().setOnKeyListener(new View.OnKeyListener() { @Override public boolean onKey(View v, int keyCode, KeyEvent event) { if (event.getAction() == KeyEvent.ACTION_UP && keyCode == KeyEvent.KEYCODE_BACK) { HomeFragment fragObj = new HomeFragment(); getActivity().getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container, fragObj) .commit(); return true; } return false; } }); }
将fragment事务添加到back stack,如下所示:
getSupportFragmentManager().beginTransaction()
.replace(R.id.your_fragment_id, RainfallFragment())
.addToBackStack(null)
.commit()
如果你正在扩展AppCompatActivity并使用最新版本的支持库,你不需要做任何其他事情。但如果不是这样,重载onBackPressed()在您的活动:
@Override
public void onBackPressed() {
if (getSupportFragmentManager().getBackStackEntryCount() > 0) {
getSupportFragmentManager().popBackStack();
} else {
finish();
}
}