在Fragment中设置OnBackPressed



我有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();
     }
}

相关内容

  • 没有找到相关文章

最新更新