[英]Previous fragment shows blank screen when back button pressed (using multiple fragmentTransactions)
[英]Blank screen is displayed when pressing the back button to move to previous 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(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();
}
}
}
我希望这可以帮助你!
谢谢你。
更新所有片段的 onCreateView
View view;
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
if (view != null) {
if (view.getParent() != null) {
((ViewGroup)view.getParent()).removeView(view);
}
return view;
}
View v=inflater.inflate(R.layout.tests, container, false);
希望这会有所帮助!!
嗨,我猜这是因为最后一个片段被删除了,您看到的是空白屏幕,这是您添加片段的片段容器。 因此,当到达最后一个屏幕时,请先完成该活动,然后再开始其他活动。 使用此代码启动新活动。
Intent intent=new Intent(getApplicationContext(), WelcomeActivity.class);
finish(); //finish used to finish blank screen activity
startActivity(intent);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.