Android Intent 获取返回值
在 Android 开发中,我们经常会使用 Intent 来实现不同组件之间的通信,例如从一个 Activity 启动另一个 Activity,或者从一个 Service 发送广播。在某些情况下,我们希望从目标组件获取返回值,这时就可以使用 Intent 的 startActivityForResult() 方法来实现。
startActivityForResult() 方法
startActivityForResult() 方法允许我们启动另一个组件并期望该组件在完成后返回结果。它的语法如下:
startActivityForResult(Intent intent, int requestCode)
其中,intent
是要启动的组件的 Intent 对象,requestCode
是一个用于识别结果的整数值。当目标组件完成后,它会调用 setResult() 方法并传递结果数据和一个结果码(RESULT_OK 或 RESULT_CANCELED)。然后,调用者组件的 onActivityResult() 方法会被调用,我们可以在该方法中处理返回的结果。
下面是一个示例,展示了如何使用 startActivityForResult() 方法启动一个目标 Activity,并获取返回结果:
public class MainActivity extends AppCompatActivity {
private static final int REQUEST_CODE = 1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button button = findViewById(R.id.button);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(MainActivity.this, TargetActivity.class);
startActivityForResult(intent, REQUEST_CODE);
}
});
}
@Override
protected 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, "Cancelled", Toast.LENGTH_SHORT).show();
}
}
}
}
在上面的代码中,我们创建了一个 MainActivity,并在其中的按钮点击事件中启动了一个名为 TargetActivity 的目标 Activity。当目标 Activity 完成后,会调用 onActivityResult() 方法,我们可以在该方法中根据 requestCode 和 resultCode 来处理返回的结果。
类图
下面是上述示例中涉及的类的类图:
classDiagram
class MainActivity {
+onCreate(Bundle savedInstanceState)
+onActivityResult(int requestCode, int resultCode, Intent data)
}
class TargetActivity
MainActivity --> TargetActivity
序列图
下面是启动目标 Activity 并获取返回结果的序列图:
sequenceDiagram
MainActivity ->> TargetActivity: startActivityForResult(intent, requestCode)
TargetActivity ->> MainActivity: onActivityResult(requestCode, resultCode, data)
在序列图中,我们可以看到 MainActivity 发起了 startActivityForResult() 方法调用,然后 TargetActivity 完成后调用了 onActivityResult() 方法,将结果返回给 MainActivity。
通过以上的代码示例、类图和序列图,我们可以清楚地了解如何使用 Intent 获取返回值。这种方式非常适用于需要从目标组件获取结果的情况,例如用户登录、选择图片等。祝你在 Android 开发中取得成功!