android-fragments Android关闭所有片段onBackPressed

gjmwrych  于 2022-11-14  发布在  Android
关注(0)|答案(2)|浏览(136)

我有一个活动,每个片段中有大约10个片段,有一个带ProgressDialog的AsyncTask。我需要关闭所有片段,当我单击“后退”按钮时,它关闭了,但ProgressDialog仍然可见,尤其是在片段之间传输时。下面是我使用的代码

@Override
    public void onBackPressed() {
      if(fragmentManager!=null){
            for(int i = 0; i < fragmentManager.getBackStackEntryCount(); ++i) {
                fragmentManager.popBackStack();
            }}
                                 }

此外,在调试时,我发现当我按下Back按钮时,它会为我打开每个片段进入onCreateView,尽管我使用transaction.replace方法在片段之间传输。

s3fp2yjn

s3fp2yjn1#

我正在用下面方法清除堆栈

public void popBackStackTillEntry(int entryIndex) {

    if (getSupportFragmentManager() == null) {
        return;
    }
    if (getSupportFragmentManager().getBackStackEntryCount() <= entryIndex) {
        return;
    }
    FragmentManager.BackStackEntry entry = getSupportFragmentManager().getBackStackEntryAt(
            entryIndex);
    if (entry != null) {
        Utilities.sDisableFragmentAnimations = true;
        getSupportFragmentManager().popBackStackImmediate(entry.getId(),
                FragmentManager.POP_BACK_STACK_INCLUSIVE);
    }

}

最多清除1表示将从堆栈中删除所有片段,仅在堆栈中保留一个片段。
用法popBackStackTillEntry(1);

qvk1mo1f

qvk1mo1f2#

这是我的Kotlin解决方案:

override fun onBackPressed() {
   supportFragmentManager.popBackStackImmediate(null, FragmentManager.POP_BACK_STACK_INCLUSIVE)
}

您可以为名称传递null,因为它可以为null。

相关问题