通过子活动导航到主要活动从小部件开始

时间:2014-09-10 11:01:10

标签: android android-actionbar android-navigation

我正在开发一些应用程序,我希望实现与Gmail应用程序相同的访问应用程序主要活动的模式。这是Android Developer site的图片:

enter image description here

基本上我已经完成了关于点击等事情的所有事情,问题是当我按下主页按钮或后退硬件按钮时。第一个(主页按钮)在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);
}

3 个答案:

答案 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);