2013-05-22 46 views
6

我有一个程序。第一项活动是启动屏幕,第二项是登录,第三项是列表视图菜单活动,然后是其他2项活动。 启动画面在3秒后消失,如果登录复选框记住我,它会直接进入菜单页面。
我重写菜单活动中的onBackPressed函数,以便在用户从菜单中单击后直接退出程序。但是,如果我经历了其他活动,它不会退出;它会转到堆栈中的前一个活动,并且该对话框不会弹出,尽管它实际上确实出现一秒钟后立即消失。android - onBackPressed()不适合我

这里是我的onBackPressed功能

public void onBackPressed() { 
    // super.onBackPressed(); 
    AlertDialog.Builder builder = new AlertDialog.Builder(this); 
    builder.setMessage("Are you Sure want to close the Application..?") 
     .setCancelable(false) 
     .setTitle("EXIT") 
     .setNegativeButton("No", new DialogInterface.OnClickListener() { 
      public void onClick(DialogInterface dialog, int id) { 
       dialog.cancel(); 
      } 
     }) 
     .setPositiveButton("Yes", new DialogInterface.OnClickListener() { 
      public void onClick(DialogInterface dialog, int id) { 
       finish(); 
      } 
     }); 
    AlertDialog alert = builder.create(); 
    alert.show(); 
    //super.onBackPressed(); 
} 
+1

什么是你的问题 – Blackbelt

+3

哇,有6/2行文本,我无法找到任何点。如何将您的语法提高到可读状态? – WarrenFaith

+0

如何添加点和逗号开始。不知何故,你可以处理语法:) –

回答

7

我会建议你使用动作条由WarrenFaith在下面的意见建议。请检查下面的链接了解更多信息

http://developer.android.com/design/patterns/navigation.html

下面是同一

http://www.vogella.com/articles/AndroidActionBar/article.html

您可以使用此教程。不过这似乎也是一个糟糕的设计。您可以查看下面的评论知道为什么

@Override 
public boolean onKeyDown(int keyCode, KeyEvent event) { 
    if (keyCode == KeyEvent.KEYCODE_BACK) { 
     onBackPressed(); 
    } 
    return super.onKeyDown(keyCode, event); 
} 

public void onBackPressed() { 
    Intent myIntent = new Intent(MyActivity.this, MainActivity.class); 

    myIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
    startActivity(myIntent); 
    finish(); 
    return; 
} 

翁后退按钮按下Inn的当前活动,当你回到你按下清除活性堆栈和naviagate到MainActivity。

此外,我会建议不要在返回按钮按下显示一个警报对话框。它是一个糟糕的设计。你可以在SO上搜索。我读同样的,被commonsware回答

+0

等一下。你说的是“close”-dialog是一个糟糕的设计,但在同一时刻你建议开启一个新的Activity?你在跟我开玩笑吗?这比一个对话询问我是否意外击中了后退按钮更糟......后退按钮应该至少使我*返回*而不是新创建的活动! – WarrenFaith

+0

@WarrenFaith我同意你的意见。我知道默认情况下它应该像那样工作。但由于OP要求我发布它。 – Raghunandan

+0

仍然是您可以创建的最糟糕的UX体验之一。因此,我将继续投票。 – WarrenFaith

1

您可以覆盖后退按钮这样

@Override 
public boolean onKeyDown(int keyCode, KeyEvent event) { 
    if (keyCode == KeyEvent.KEYCODE_BACK) { 
     // write your code here 
    } 
    return true; 
} 
1
@Override 
public void onBackPressed() { 
    super.onBackPressed(); 
    int count = getSupportFragmentManager().getBackStackEntryCount(); 
    Log.e("count", "is getBackStackEntryCount -> " + count); 
    for (int i = 0; i < count; ++i) { 
     getSupportFragmentManager().popBackStackImmediate(); 
     Log.e("getBackStack", "IS REMOVED " + i); 
    } 
    // toolbar.setTitle("Dashboard"); 
} 
0

拆卸完成();每次startActivity()之后;将允许正确的导航,而不必调用finish();它执行onDestroy()方法。谢谢你 。无需重写onBackPressed函数。只有当您的活动不再需要并且应该关闭时才使用finish()。

+0

它比不得不写一个onPressedBack方法用于导航的每个活动,更不用说所有的Alert对话框。只是说。 –

+0

只需在所有您不希望用户返回的活动中使用完成功能,例如登录 –