我正在开发一些应用程序,我希望实现与Gmail应用程序相同的访问应用程序主要活动的模式。这是Android Developer site的图片:
基本上我已经完成了关于点击等事情的所有事情,问题是当我按下主页按钮或后退硬件按钮时。第一个(主页按钮)在onOptionsItemSelected中启动代码,但对于第二个(后退硬件按钮),我不知道如何覆盖它。以下是我尝试使用Gmail应用程序实现相同模式的代码:
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case android.R.id.home:
Intent intent = new Intent(this, MainActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);
finish();
return true;
}
return super.onOptionsItemSelected(item);
}
}
对此有任何帮助将不胜感激。
编辑:感谢mansoulx和Jack,可以使用onBackPresed()方法覆盖硬件按钮操作。问题的一部分已经解决,但我仍然没有弄清楚如何使用Intents实现与Gmail应用程序相同的模式。
编辑2:我实现了与Android Developer site相同的代码,但它仍然无效。我添加了对该代码的IF语句的否定,然后所需的模式开始工作,但是动画错误(从多任务菜单更改应用程序时使用的动画)。我不认为这是对的,所以我仍在寻求帮助。这是我使用的代码(没有否定):
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case android.R.id.home:
Intent upIntent = NavUtils.getParentActivityIntent(this);
if (NavUtils.shouldUpRecreateTask(this, upIntent)) {
TaskStackBuilder.create(this).addNextIntentWithParentStack(upIntent).startActivities();
} else {
NavUtils.navigateUpTo(this, upIntent);
}
return true;
}
return super.onOptionsItemSelected(item);
}
答案 0 :(得分:0)
您可以通过覆盖Activity.onBackPressed()来覆盖后退按钮。
您还可以查看此链接以实施反向导航。 http://developer.android.com/training/implementing-navigation/ancestral.html
回答EDIT2: 这不是推荐的行为,但我个人做了类似的事情:
parentActivity:
startActivity(new Intent(this, childactivity.class).putExtra("return", true));
childActivity.onBackPress:
if (getIntent().getBooleanExtra("return", false))
super.onBackPress();
else {
finish();
startActivity(new Intent(getApplicationContext(), parentactivity.class).setFlags(Intent.FLAG_ACTIVITY_NEW_TASK));
}
答案 1 :(得分:0)
@Override
public boolean onOptionsItemSelected(
switch (menuItem.getItemId()) {
case android.R.id.home:
// code for Up button click
break;
return super.onOptionsItemSelected(item);
}
@Override
public void onBackPressed() {
// TODO Auto-generated method stub
super.onBackPressed();
// code for Back button
}
此link可能会对您有所帮助。
答案 2 :(得分:0)
我在小部件的IntentService中使用此代码解决了这个问题:
Intent launchIntent = new Intent(this, ChildActivity.class);
PendingIntent clickPendingIntentTemplate = TaskStackBuilder.create(getBaseContext())
.addNextIntentWithParentStack(launchIntent)
.getPendingIntent(0, PendingIntent.FLAG_UPDATE_CURRENT);
view.setOnClickPendingIntent(R.id.widget, clickPendingIntentTemplate);