java - 按后退按钮移至上一个 fragment 时显示空白屏幕

标签 java android android-fragments

当我按下后退按钮时,它会移动到上一个 fragment ,但也显示一个空白屏幕,我需要单击它来消除它。如何摆脱这个空白屏幕?我看到它以某种方式连接到第一个 addToBackStack 但我仍然无法修复它

这是我的 onNavigationItemSelected 方法:

public boolean onNavigationItemSelected(@NonNull MenuItem menuItem) {
        Fragment fragment=null;
        switch (menuItem.getItemId()) {
            case R.id.nav_home:
                fragment=new HomeFragment();
                break;
            case R.id.nav_income:
                fragment=new IncomeFragment();
                break;
            case R.id.nav_expense:
                fragment=new ExpenseFragment();
                break;
            case R.id.nav_sign_out:
                FirebaseAuth mAuth = FirebaseAuth.getInstance();
                mAuth.signOut();
                startActivity(new Intent(getApplicationContext(), WelcomeActivity.class));
                Toast.makeText(getApplicationContext(), "Signed Out", Toast.LENGTH_LONG).show();
                break;

        }
        if(fragment!=null)
            getSupportFragmentManager().beginTransaction().
                    replace(R.id.fragment_container, fragment).addToBackStack("").commit();

        return true;
    }

这是我的 onBackPressed() 方法:

  public void onBackPressed() {
        final FragmentManager fragmentManager = getSupportFragmentManager();
        if (drawerLayout.isDrawerOpen(GravityCompat.START)) {
            drawerLayout.closeDrawer(GravityCompat.START);
        } else {
            AlertDialog.Builder builder = new AlertDialog.Builder(this, R.style.AlertDialogCustom);
            if (fragmentManager.getBackStackEntryCount() == 0) {
                builder.setTitle("Sign out");
                builder.setMessage("Are you sure you want to sign out?");
                builder.setPositiveButton("YES", new DialogInterface.OnClickListener() {

                    public void onClick(DialogInterface dialog, int which) {
                        firebaseAuth.signOut();
                        dialog.dismiss();
                        startActivity(new Intent(getApplicationContext(), WelcomeActivity.class));
                    }
                });

                builder.setNegativeButton("NO", new DialogInterface.OnClickListener() {

                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        dialog.dismiss();
                    }
                });
            } else {
                    fragmentManager.popBackStack();
            }

            AlertDialog alert = builder.create();
            alert.show();
        }
    }

最佳答案

您需要按照以下方式更改 if 条件

if(fragmentManager.getBackStackEntryCount() - 1 == 0){
    //Do your code
}else{
    fragmentManager.popBackStack();
}

根据您的代码,请找到下面的完整代码

public void onBackPressed() {
    final FragmentManager fragmentManager = getSupportFragmentManager();
    if (drawerLayout.isDrawerOpen(GravityCompat.START)) {
        drawerLayout.closeDrawer(GravityCompat.START);
    } else {
        if (fragmentManager.getBackStackEntryCount() - 1 == 0) {
            AlertDialog.Builder builder = new AlertDialog.Builder(this, R.style.AlertDialogCustom);
            builder.setTitle("Sign out");
            builder.setMessage("Are you sure you want to sign out?");
            builder.setPositiveButton("YES", new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int which) {
                    firebaseAuth.signOut();
                    dialog.dismiss();
                    startActivity(new Intent(getApplicationContext(), WelcomeActivity.class));
                }
            });
            builder.setNegativeButton("NO", new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int which) {
                    dialog.dismiss();
                }
            });
            AlertDialog alert = builder.create();
            alert.show();
        } else {
            fragmentManager.popBackStack();
        }
    }
}

希望对您有帮助!

谢谢。

关于java - 按后退按钮移至上一个 fragment 时显示空白屏幕,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59894854/

相关文章:

java - 由于名称冲突无法重写方法

java - 没有方法签名:archives.internal.DefaultManifest.srcFile()

android.content.res.Resources$NotFoundException : File res/mipmap-xhdpi-v4/ic_copyright_black_24dp. png 来自 xml 类型 xml 资源 ID #0x7f0d0007

android - 如何从另一个模块调用layout xml

Java 正则表达式模式太长?

java - ESAPI 库中是否有验证可以确保 Veracode SAST 扫描中不会出现 CWE-93 漏洞?

java - 插入查询不起作用

java - 在 Android 中加载静态 C++ 库时阻塞 UI

android - Google Analytics 的应用内价格格式

android - 长按 ListFragment