活动如何开始新活动并关闭自己?

时间:2014-01-16 08:53:27

标签: 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();               
        }

我看到活动B打开并调用完成后,活动A出现

我知道它从未关闭过。

我该如何解决这个问题?

6 个答案:

答案 0 :(得分:1)

尝试

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

答案 1 :(得分:0)

在开始活动之前致电finish()

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

答案 2 :(得分:0)

你必须使用Intent在哪里开始新的活动

Intent intent=new Intent(MainActivity.this,newActivity.class);
startActivity(intent);

你必须覆盖 MainActivity onPause()

    @Override
protected void onPause() {
    finish();
}

答案 3 :(得分:0)

请尝试以下代码:

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

答案 4 :(得分:0)

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

答案 5 :(得分:0)

对于活动B

的结果,您的活动开始A
public void onClick(View v) {
    Intent intent = new Intent(A.this, B.class);
    startActivityForResult(intent,1);
    setResult(RESULT_OK);
    finish();               
}

因此,当活动A完成时,活动B期望按活动B提供结果。

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

// modified onClick method
public void onClick(View v) {
    // simply set result to OK and finish activity A
    setResult(RESULT_OK);
    finish();
}

在启动活动A的活动中,定义两个常量,或者您可以使用单独的Java类来定义常量并在此类中引用它们。

public static final int REQUEST_CODE_FOR_A = 100;
public static final int REQUEST_CODE_FOR_B = 101;

覆盖启动活动onActivityResult()的活动中的A方法,并按如下方式启动活动B

@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
        }
    }
}

希望这有帮助。