安卓基础(startActivityForResult和onActivityResult)
onActivityResult
方法有三个参数:
requestCode
:启动Activity
时传入的请求码,用于区分不同的启动请求。resultCode
:返回结果的状态码,通常为RESULT_OK
或RESULT_CANCELED
。data
:一个Intent
对象,包含返回的数据。
使用步骤
- 调用
startActivityForResult
启动新Activity
:在原Activity
中调用startActivityForResult
方法,并传入一个请求码。 - 在新
Activity
中设置返回结果:在新Activity
完成操作后,调用setResult
方法设置返回结果,并调用finish
方法关闭当前Activity
。 - 重写
onActivityResult
方法处理返回结果:在原Activity
中重写onActivityResult
方法,根据请求码和结果码处理返回的数据。
1. 原 Activity
(MainActivity
)
import android.content.Intent;
import android.os.Bundle;
import android.widget.Toast;
import androidx.appcompat.app.AppCompatActivity;public class MainActivity extends AppCompatActivity {private static final int REQUEST_CODE = 1;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);// 启动另一个 ActivityIntent intent = new Intent(this, SecondActivity.class);startActivityForResult(intent, REQUEST_CODE);}@Overrideprotected void onActivityResult(int requestCode, int resultCode, Intent data) {super.onActivityResult(requestCode, resultCode, data);if (requestCode == REQUEST_CODE) {if (resultCode == RESULT_OK) {// 获取返回的数据String result = data.getStringExtra("result");Toast.makeText(this, "返回结果: " + result, Toast.LENGTH_SHORT).show();} else if (resultCode == RESULT_CANCELED) {Toast.makeText(this, "操作被取消", Toast.LENGTH_SHORT).show();}}}
}
2. 新 Activity
(SecondActivity
)
import android.content.Intent;
import android.os.Bundle;
import androidx.appcompat.app.AppCompatActivity;public class SecondActivity extends AppCompatActivity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_second);// 设置返回结果Intent intent = new Intent();intent.putExtra("result", "这是返回的结果");setResult(RESULT_OK, intent);// 关闭当前 Activityfinish();}
}