当我按下后退按钮时,它会移动到上一个 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/