![](/img/trans.png)
[英]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.