安卓 setResult 和 onActivityResult 如果是其他Activity调用没效果,如何解决
时间: 2024-03-13 22:46:49 浏览: 116
如果其他Activity调用setResult方法并且期望通过onActivityResult方法来接收结果,则该操作不会起作用。因为setResult方法是用于在当前Activity中设置结果并将其返回给启动当前Activity的Activity,而onActivityResult方法是用于接收由当前Activity返回的结果。如果需要在其他Activity中访问当前Activity的结果,可以通过以下步骤实现:
1. 在当前Activity中定义一个静态的回调方法(callback),用于在其他Activity中设置结果;
2. 在其他Activity中通过当前Activity的类名和回调方法名创建一个Intent对象;
3. 调用startActivityForResult方法启动当前Activity,并传入Intent对象和请求码;
4. 在当前Activity中设置结果,并在回调方法中将结果返回给其他Activity。
以下是示例代码:
在当前Activity中定义一个静态的回调方法:
```java
public static void setResult(int resultCode, Intent data) {
if (sCallback != null) {
sCallback.onActivityResult(resultCode, data);
}
}
private static Callback sCallback;
public static void setCallback(Callback callback) {
sCallback = callback;
}
public interface Callback {
void onActivityResult(int resultCode, Intent data);
}
```
在其他Activity中创建一个Intent对象并启动当前Activity:
```java
Intent intent = new Intent(this, CurrentActivity.class);
intent.putExtra("param", value);
intent.putExtra("callback", new ComponentName(this, OtherActivity.class));
startActivityForResult(intent, requestCode);
```
在当前Activity中设置结果并返回给其他Activity:
```java
Intent data = new Intent();
data.putExtra("result", value);
CurrentActivity.setResult(Activity.RESULT_OK, data);
finish();
```
在其他Activity中实现回调方法并接收结果:
```java
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == requestCode && resultCode == Activity.RESULT_OK) {
String result = data.getStringExtra("result");
// 处理结果
}
}
```
这样,在其他Activity中就可以通过调用setResult方法来设置结果,并通过onActivityResult方法来接收结果了。
阅读全文