Java 活动如何启动新活动并关闭自身?

Java 活动如何启动新活动并关闭自身?,java,android,android-intent,android-activity,Java,Android,Android Intent,Android Activity,我有一个android视图,它调用另一个视图,应该关闭 我使用这个代码 public void onClick(View v) { Intent intent = new Intent(A.this, B.class); startActivityForResult(intent,1); setResult(RESULT_OK); finish();

我有一个android视图,它调用另一个视图,应该关闭

我使用这个代码

        public void onClick(View v) {
            Intent intent = new Intent(A.this, B.class);
            startActivityForResult(intent,1);
            setResult(RESULT_OK);
            finish();               
        }
我看到活动B打开并调用完成后,活动A出现

我知道它从未关闭过

我如何解决这个问题

试试看

public void onClick(View v) {
    Intent intent = new Intent(A.this, B.class);
    A.this.finish();   
    startActivity(intent);    
}
在开始活动之前调用
finish()

public void onClick(View v) {
            Intent intent = new Intent(A.this, B.class);
            finish();               
            startActivityForResult(intent,1);
            setResult(RESULT_OK);
        }

您必须在想要开始新活动的地方使用意图

Intent intent=new Intent(MainActivity.this,newActivity.class);
startActivity(intent);
您必须覆盖main活动onPause()


请尝试以下代码:

public void onClick(View v) {
        Intent intent = new Intent(A.this, B.class);
        startActivity(intent);
        finish();               
    }

您正在启动活动
B
,查看活动
A

public void onClick(View v) {
    Intent intent = new Intent(A.this, B.class);
    startActivityForResult(intent,1);
    setResult(RESULT_OK);
    finish();               
}
因此,当活动
B
完成时,活动
A
期望活动
B
交付结果

现在,要解决此问题,请在启动活动
A
的活动的
onActivityResult()
方法中启动活动
B

// modified onClick method
public void onClick(View v) {
    // simply set result to OK and finish activity A
    setResult(RESULT_OK);
    finish();
}
在启动activity
A
的activity中,定义两个常量,或者您可以使用单独的Java类来定义常量并在此类中引用它们

public static final int REQUEST_CODE_FOR_A = 100;
public static final int REQUEST_CODE_FOR_B = 101;
覆盖活动中启动活动
A
和启动活动
B
onActivityResult()
方法,如下所示

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if (resultCode == RESULT_OK) {
        if(requestCode == REQUEST_CODE_FOR_A) {
            // start activity B when activity returns RESULT_OK
            Intent intent = new Intent(this, B.class);
            startActivityForResult(intent, REQUEST_CODE_FOR_B);
        } else if (requestCode == REQUEST_CODE_FOR_B) {
            // handle the result from Activity B
        }
    }
}

希望这能有所帮助。

我觉得这似乎不对,你必须在以下两种情况中做出选择:从新活动中剔除一个值,在这种情况下,你无法完成当前活动;在启动新活动时,如果不剔除一个值,你可以完成“母亲”活动。这不会在开始新活动之前关闭活动吗?这正是您想要的,对吗?结束活动!是的,它将在开始新的活动之前完成活动。你必须这样做吗?为什么要onCreate/onPause?您可以在任何地方完成活动,但这是在onPause中完成活动的正确方法,因为当我们在intent中调用新活动时,应用程序会在onPause中暂停活动,因此我会通过完成第一个活动来覆盖此功能
public static final int REQUEST_CODE_FOR_A = 100;
public static final int REQUEST_CODE_FOR_B = 101;
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if (resultCode == RESULT_OK) {
        if(requestCode == REQUEST_CODE_FOR_A) {
            // start activity B when activity returns RESULT_OK
            Intent intent = new Intent(this, B.class);
            startActivityForResult(intent, REQUEST_CODE_FOR_B);
        } else if (requestCode == REQUEST_CODE_FOR_B) {
            // handle the result from Activity B
        }
    }
}