完成Android中的父级和当前活动

hpi*_*que 49 android android-activity

我有3个活动.活动A导致活动B,活动B又可以返回活动A或开始活动C.但是,如果我在活动C中按回应用程序应该关闭.

总结一下:

  • 活动A开始活动B.
  • 返回活动B应该导致A
  • 活动B开始活动C.
  • 返回活动C应该关闭应用程序

我应该如何从活动B转到C?这段代码目前在最后一行给我一个NullPointerException:

Intent intent=new Intent(ActivityB.this, ActivityC.class);
startActivity(intent);
ActivityB.this.finish();
ActivityB.this.getParent().finish();
Run Code Online (Sandbox Code Playgroud)

如果我切换最后两行,我也会得到一个空指针.

cod*_*ser 55

我不知道这是否有效,但你可以尝试一下:

  • 从活动A开始,使用结果B开始活动 startActivityForResult()

  • 在活动B中,当用户触发活动C时,启动活动C.

startActivity() 马上回来,所以

  • 设置一个结果,通知A也完成,

  • 打电话给finish()B.

  • 当A从B接收到该结果时,A finish()也会自行调用.

如果做不到这一点,您可以将Activity C放入自己的应用程序中,然后在启动第二个应用程序后关闭第一个应用程序(使用A和B).

PS在你前进的过程中考虑Falmarri的评论!
祝好运.


小智 34

如果要从子活动中完成父活动,

在父活动中,在触发子活动时,使用以下命令: -

startActivityForResult(intent_name,any_integer_variable);
Run Code Online (Sandbox Code Playgroud)

并以下列方式覆盖onActivityResult方法: -

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if(resultCode==2){
        finish();
    }
}
Run Code Online (Sandbox Code Playgroud)

现在,在子活动中,以下列方式覆盖onStop和onDestroy: -

protected void onStop() {
    setResult(2);
    super.onStop();
}
@Override
protected void onDestroy() {
    setResult(2);
    super.onDestroy();
}
Run Code Online (Sandbox Code Playgroud)

请注意,我已在子活动中将值设置为2,并在父活动中检查它.如果值与我设置的值相同,那么父活动也将完成.然后,您可以使用递归方法进行进一步的活动.

  • 我完全一样,但无论我使用`setResult()`在子活动中设置什么值,父活动总是接收'0`. (2认同)
  • 我发现 `onActivityResult` 在 `onStop` 和 `onDestroy` 之前被调用,你需要在 `setResult` 之前。 (2认同)

TS.*_*.xy 12

您应该在父Activity中使用onActivityResult方法

假设活动A是活动B的父级.如果要在活动B中单击后退按钮以退出应用程序(也退出活动A)

在您的活动B中,onStop()onDestroy()

你打电话

setResult(0); //any int number is fine
Run Code Online (Sandbox Code Playgroud)

这会将结果代码传递给其父活动.

您的父Actvity A,侦听onActivityResult您可以在您可以调用的方法中使用方法所需的结果代码

if(resultCode == 0) //matches the result code passed from B
{
    ActivityA.this.finish()
}
Run Code Online (Sandbox Code Playgroud)

这个对我有用 :)


Yug*_*ank 5

这些都不适合我。所以我找到了一个解决方案。帮助中明确列出了 Intent.FLAG_ACTIVITY_CLEAR_TASK 必须与 Intent.FLAG_ACTIVITY_NEW_TASK 一起使用。所以这是一个对我有用的代码。

Intent intent=new Intent(ActivityB.this, ActivityC.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK|Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
Run Code Online (Sandbox Code Playgroud)