Android 通过从小部件启动的子活动导航到主活动

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

我正在开发一些应用程序,我想实现和Gmail应用程序相同的访问应用程序主要活动的模式。以下是一张照片:

基本上我已经做了所有关于点击之类的事情,问题是当我按下home按钮或back硬件按钮时。第一个(home按钮)启动OnOptions ItemSelected中的代码,但第二个(back hardware按钮)我不知道如何覆盖它。以下是我试图实现与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()方法重写。问题的一部分已经解决了,但我仍然不知道如何实现与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);