如何在超过 10 次以上的片段中管理 BackPress?

Posted

技术标签:

【中文标题】如何在超过 10 次以上的片段中管理 BackPress?【英文标题】:How to manage BackPress in fragment more than 10+ time? 【发布时间】:2021-05-02 00:06:06 【问题描述】:

我想在片段中管理后台,我知道通过调用 onBackpress 方法来处理活动中的后台。

 @Override
    public void onBackPressed() 
            super.onBackPressed();
    

但我在 Activity 中实现了 Fragment 并对其进行了 10 多次替换,所以每当我按下回键应用程序时都会关闭。

所以我想多次管理片段中的背压。

如果有人知道最佳解决方案,请给出您的答案,我已经尝试了类似问题给出的许多解决方案,但它不起作用。

在此先感谢 :)

【问题讨论】:

【参考方案1】:

您可以使用这种方式在 Fragment 上处理背压

    @Override
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) 
    super.onViewCreated(view, savedInstanceState);
    if (getView() != null) 
        getView().setFocusableInTouchMode(true);
        getView().requestFocus();
        getView().setOnKeyListener(new View.OnKeyListener() 
            @Override
            public boolean onKey(View view, int keyCode, KeyEvent keyEvent) 
                if (keyEvent.getAction() == KeyEvent.ACTION_DOWN)
                    if (keyCode == KeyEvent.KEYCODE_BACK)
                        if (Constants.getInstance().checkIsAudioPlay()) 
                            stopAudioPlaying();
                            refreshView();
                            btnPlayALL.setText(R.string.play_all);
                            return true;
                         else 
                            return false;
                        

                return false;
            
        );
    

【讨论】:

【参考方案2】:

在您的活动的onBackPressed() 方法中添加以下内容:

    FragmentManager fragmentManager = getSupportFragmentManager();
    if (fragmentManager.getFragments().size() > 0) 
        fragmentManager.popBackStack();
    else 
        super.onBackPressed();
    

另外不要忘记覆盖片段的onPause() 方法并处理您希望片段在按下后退按钮时完成的任务。

【讨论】:

以上是关于如何在超过 10 次以上的片段中管理 BackPress?的主要内容,如果未能解决你的问题,请参考以下文章

视频二次裁剪时间计算出原片的时间片段算法

如何在运行时管理多个 pageIndicator

如何在 Elasticsearch 中管理超过 10,000,000 个文档的索引以实现快速搜索?

如何使用tablayout和片段管理java文件[关闭]

如何删除使用片段管理器添加的所有片段?

在 HTML5 Video 中,如何播放长视频中的小片段?