簡體   English   中英

按后退按鈕移動到上一個片段時顯示空白屏幕

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM