Android的Start Start Activity返回不同的resultCode

时间:2013-11-20 03:01:40

标签: android android-intent

关于类似主题有很多问题,但在搜索后我找不到与我的问题相符的问题。

我知道为结果启动意图,并且重写onActivityResult()来处理这些意图,但出于某种原因,当我从活动b回到活动a时,我遇到了问题。因此,例如,在我的项目的3个活动(AddDirections类)的最后一个中,我调用此方法返回到上一个活动:

public void finish(View v){
    Intent intent = new Intent(getApplicationContext(), AddIngredients.class);
    intent.putExtra(Home.RECIPE_INTENT, (Parcelable)recipe);
    intent.putExtra(Home.RECIPE_ID_INTENT, recipe.getId());
    setResult(RESULT_OK, intent);
    finish();
}

在AddIngredients类中,我有这个方法:

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data){
    super.onActivityResult(requestCode, resultCode, data);
    if(resultCode == RESULT_OK && requestCode == DIRECTIONS_REQUEST){
        Intent intent = new Intent(getApplicationContext(), NameRecipe.class);
        Recipe recipe = data.getParcelableExtra(Home.RECIPE_INTENT);
        intent.putExtra(Home.RECIPE_INTENT, (Parcelable)recipe);
        setResult(RESULT_OK, intent);
        finish();
    }
}

这应该接受来自AddDirections类的返回结果,并将其传递给NameRecipe,其中我有完全相同的方法(除了新的Intent方法,它说Home.class)。在Home类中,我再次使用相同的方法来接收意图,因为它一直从应用程序中退出。

现在,如果我从头到尾直接完成各个步骤,我会说这很有效。但是,如果我使用向上导航来进行当前活动的父活动,那么它会混淆一切。然后,当我在最后一步中单击完成时,它会混淆我为每个意图设置的resultCode。我确保将正确的结果显式设置为RESULT_OK(等于1),但由于某种原因,有时它会将我设置为resultCode的内容更改为0。

如果用户点击向上导航,我会在活动中执行以下操作:

public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
    case android.R.id.home:
        Intent intent = NavUtils.getParentActivityIntent(this);
        intent.putExtra(Home.RECIPE_INTENT, (Parcelable)recipe);
        setResult(RESULT_OK, intent);
        NavUtils.navigateUpTo(this, intent);
        finish(); //Have tried with and without this
        return true;
    }
    return super.onOptionsItemSelected(item);
}

就像我说的那样,我搜索了使用向上导航后resultCode被覆盖的原因很多,但我没有找到原因。

非常感谢任何帮助。

3 个答案:

答案 0 :(得分:0)

看起来底层问题实际上是如何使用内置的向上导航在堆栈中的多个活动之间导航。我想知道是否为这种类型的导航正确设置了项目。从android开发人员资源up navigation from google,您必须使用父活动设置导航按钮。然后,应用程序可以遍历不同的活动。从它看起来应该允许A-> B B-> C c-> D并且如果需要则返回到A.如果用户选择的话,我还会添加一个按钮,允许直接返回A路径。

如果您有更多关于您要在活动之间完成什么的信息,无论是来回传递数据还是只返回上一个有用的活动。希望链接可以帮助您解决这个问题。

答案 1 :(得分:0)

你的问题似乎是NavUp,这个util类倾向于清除一切导航到父包括你的resultCode和活动的实例,导致一个Canceled结果(如果为结果启动)到一个新的实例父活动,为了解决快速解决方案是在你的清单中声明android:launchMode="singleTop",但我不建议使用它,除非你是100%你想要的,而是我会进入我的导航器类,或者我导航的方法,并将特定导航覆盖为:

Intent parentActivityIntent = NavUtils.getParentActivityIntent(this); 
parentActivityIntent.setFlags(
    Intent.FLAG_ACTIVITY_SINGLE_TOP | Intent.FLAG_ACTIVITY_CLEAR_TOP
); 
NavUtils.navigateUpTo(this, parentActivityIntent);

希望这有帮助!! 对不起,迟到的答案是:p

答案 2 :(得分:-1)

如果通过'向上导航'表示按下后退键,则需要覆盖功能

@Override
public void onBackPressed() {
    // TODO Auto-generated method stub
    super.onBackPressed();
}

如果您从“选项菜单”中直接点击某个项目到您的父活动时,您似乎想要回来,那么我认为您需要一步一步地返回,因为此时已有活动运行并等待结果,所以当你直接进入家庭活动时,它已经在等待活动B的答案,而不是活动C我希望我解释正确:)