Android 通过从小部件启动的子活动导航到主活动
我正在开发一些应用程序,我想实现和Gmail应用程序相同的访问应用程序主要活动的模式。以下是一张照片: 基本上我已经做了所有关于点击之类的事情,问题是当我按下home按钮或back硬件按钮时。第一个(home按钮)启动OnOptions ItemSelected中的代码,但第二个(back hardware按钮)我不知道如何覆盖它。以下是我试图实现与Gmail应用程序相同模式的代码:Android 通过从小部件启动的子活动导航到主活动,android,android-actionbar,android-navigation,Android,Android Actionbar,Android Navigation,我正在开发一些应用程序,我想实现和Gmail应用程序相同的访问应用程序主要活动的模式。以下是一张照片: 基本上我已经做了所有关于点击之类的事情,问题是当我按下home按钮或back硬件按钮时。第一个(home按钮)启动OnOptions ItemSelected中的代码,但第二个(back hardware按钮)我不知道如何覆盖它。以下是我试图实现与Gmail应用程序相同模式的代码: @Override public boolean onOptionsItemSelected(MenuItem
@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()方法重写。问题的一部分已经解决了,但我仍然不知道如何实现与Gmail应用程序相同的模式
编辑2:我实现了与上相同的代码,但仍然不起作用。我在该代码的IF语句中添加了否定,然后想要的模式开始工作,但使用了错误的动画(当您从多任务菜单更改应用程序时使用的动画)。我认为这是不对的,所以我仍在寻求帮助。这就是我使用的代码(没有否定):
您可以通过重写Activity.onBackPressed()来重写back按钮 您还可以签出此链接以实现向后导航。 对第二版的答复: 这不是推荐的行为,但我个人会这样做: 家长活动:
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));
}
这可能会对您有所帮助。我在小部件的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);
感谢部分解决方案,但从子活动返回的问题仍然存在。查看已编辑的内容。我的答案中的链接解释了如何使一个活动成为另一个活动的父活动。因此,在子级上调用
finish
将从堆栈中打开它的父级。我做了所有必要的事情,以实现该链接中所述的目标,但它仍然不起作用。如果我通过小部件启动活动,然后单击向上按钮,我将返回主屏幕和小部件。我想回到应用程序的主活动,它是我通过widget访问的活动的父活动。如果要使用onBackPressed(),请记住删除super。我实现了“使用新的后堆栈向上导航”的代码,但它仍然不起作用。请看我的编辑2。
@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
}
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);