第一个片段onBackPressed()

时间:2017-04-05 20:30:22

标签: android android-fragments android-activity back onbackpressed

所以.. 我有多个片段,用户在登录后看到的第一个片段被视为' WelcomeFragment'其余的并不重要。

我想只在用户查看WelcomeFragment时弹出一个用于注销过程的对话框。我怎样才能做到这一点?我试过以下:

@Override
    public void onBackPressed() {
        DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
        if (drawer.isDrawerOpen(GravityCompat.START)) {
            drawer.closeDrawer(GravityCompat.START);
        } else {
            super.onBackPressed();
            if(getFragmentManager().getBackStackEntryCount() == 0) {
                new AlertDialog.Builder(MenuActivity.this)
                        .setTitle("Logout")
                        .setMessage("Sure you want to logout?")
                        .setPositiveButton(R.string.yes, new DialogInterface.OnClickListener() {
                            public void onClick(DialogInterface dialog, int which) {
                                tool.logout();
                            }
                        })
                        .setNegativeButton(R.string.no, new DialogInterface.OnClickListener() {
                            public void onClick(DialogInterface dialog, int which) {

                            }
                        })
                        .setIcon(R.mipmap.change)
                        .show();


            }
            else {
                getFragmentManager().popBackStack();
            }


        }
    }

(退出方法)

public void logout() {
    Intent mainIntent = new Intent(context, MainActivity.class);
    mainIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    mainIntent.putExtra("logout", "logout");
    context.startActivity(mainIntent);
}

3 个答案:

答案 0 :(得分:0)

Fragment fr = getFragmentManager().findFragmentByTag("WelcomeFragmentTag");
if (null != fr && fr.isAdded()) {
    // show dialog
} else {
    // do not show dialog
}

这假设您已将WelcomeFragment提供WelcomeFragmentTag作为交易代码添加:

getSupportFragmentManager().beginTransaction()
        .add(R.id.content_frame,  new WelcomeFragment(), "WelcomeFragmentTag")
        .commit();

答案 1 :(得分:0)

有两种可能性:

1)不要将WelcomeFragment添加到backstack,只验证这个onBackPressed函数:

FragmentManager fm = getSupportFragmentManager();
if(fm.getBackStackEntryCount()==0){
    //Logout dialog
}

2)使用TAG添加WelcomeFragment并验证该TAG是否是onBackPressed函数的顶部:

FragmentManager fm = getSupportFragmentManager();
cont = fm.getBackStackEntryCount()
if(cont>0&&fm.getBackStackEntryAt(cont-1).getName().equals("WelcomeFragmentTAG"){
    //Logout dialog
}

答案 2 :(得分:0)

首先删除所有片段,但欢迎片段 - 由于欢迎片段是第一个片段 -

 FragmentManager fm =getFragmentManager();
 for(int i=1; i < fm.getBackStackEntryCount(); i++)
    {
       fm.popBackStack();
    }

然后检查当前片段是否为欢迎片段

 Fragment fr = fm.findFragmentByTag("WelcomeFragmentTag");
    if (null != fr && fr.isAdded()) {
        // show dialog
    } else {
        // do not show dialog
    }