startActivityForResult的初步学习

最后更新于:2022-04-01 14:43:21

安卓Activity之间传数据除了用putExtra之外还可以用startActivityForResult获取一个Activity的返回值。为了简单阐述这种方式我们来做个简单的模型: 假设A去开启B,则调用函数  void startActivityForResult([Intent]() intent,int requestCode),这时候会设置一个requestCode,要求>=0就行了 这时候A需要覆盖onActivityResult方法获取返回值,这个方法具体是这样的:void onActivityResult(int requestCode,int resultCode,[Intent]() data),requestCode的数值就是刚刚设置的requestCode,resultCode的数值会在B里面设置。这个函数将在B结束后调用。 这时候B需要调用setResult函数设置返回值,这个函数具体是这样的:void setResult(int resultCode,[Intent]() data),第一个参数设置resultCode,这里的resultCode就是onActivityResult的resultCode。 查了一些资料关于这几个函数的调用时机,发现下面这句话总结的很好: **B**退回**A**过程中,首先是**B**处于Pause 状态,然后等待 **A **执行****restart——〉 start ——〉resume,然后才是B 的stop——〉destroy,而**A**的 onActivityResult() 需要在**B**pause之后,**A**restart 之前 这中间调用,所以**B**中的setResult()函数应该放在**B**pause 之前调用。这点非常的重要啊。 下面是代码: 第一个Activity: ~~~ package com.example.mytest; import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.util.Log; import android.view.View; import android.widget.TextView; public class MainActivity extends Activity { private TextView tv ; @Override protected void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); tv = (TextView) findViewById(R.id.tv); } public void click(View v) { Intent intent = new Intent(this, NextActivity.class); startActivityForResult(intent, 1); } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { // TODO Auto-generated method stub super.onActivityResult(requestCode, resultCode, data); String str = data.getStringExtra("data"); tv.setText(str); System.out.println("onActivityResult"); } } ~~~ 第二个Activity: ~~~ package com.example.mytest; import java.util.Random; import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.widget.TextView; public class NextActivity extends Activity{ @Override protected void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); setContentView(R.layout.next_activity); Intent intent = new Intent(this ,MainActivity.class); intent.putExtra("data", "传输"); this.setResult(2, intent); } } ~~~
';