【问题标题】:First Fragment onBackPressed()第一个片段 onBackPressed()
【发布时间】:2017-04-05 20:30:21
【问题描述】:

所以.. 我有多个 Fragment,用户在登录后看到的第一个被视为“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);
}

【问题讨论】:

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


    【解决方案1】:
    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();
    

    【讨论】:

    • 当用户由于来自另一个fragment的backpress而进入fragment时,WelcomeFragment会保留标签吗?
    • 现在的问题是我无法通过单击“返回”按钮从其他片段返回到 WelcomeFragment。
    • 我还有一个奇怪的问题,当我现在单击导航栏并手动转到 WelcomeFragment 时,textView 变暗并且片段就像固定一样,当我尝试进入另一个片段时,WelcomeFragment 视图仍然存在,但与其他片段融合或混合。
    【解决方案2】:

    首先删除除Welcome Fragment之外的所有片段- 因为欢迎片段是第一个片段-

     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
        }
    

    【讨论】:

      【解决方案3】:

      有两种可能:

      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
      }
      

      【讨论】:

        猜你喜欢
        • 2016-09-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-11-23
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多