我有一个 Activity A,它使用 startActivityForResult
打开 Activity B。
现在在 Activity B 中,它也是一个 Activity fragment 容器,它还包含一个带有菜单项的 ActionBar
。
现在,每当我在 Activity B 中按下操作栏按钮时,它应该从 Activity B 的选定 fragment 返回数据而不是它的持有者,而是应该将数据返回给 Activity A,因为它是启动的那个。
所以它基本上是将数据 fragment (在 Activity B 内)传递给 Activity B,然后再传递给 Activity A。
我正在绝望地尝试找到解决它的方法。有什么办法可以做到吗?
最佳答案
免责声明有很多方法,这是我更喜欢的一种,不是最好的,也不是最完美的,我就是喜欢这个。
在我看来,最简单的方法是将数据从 B 内部的 Fragment 传递到 ActivityB,然后从 ActivityB 传递到 ActivityA。
第 1 步 将数据从 Fragment 传递到容器 Activity 您有多种方法;我通常使用的是使用接口(interface):
为ActivityB创建界面
public interface IActivityB {
void setDataAAndFinish(whateverType data);
}
在你的activityB中实现接口(interface)
public class InterventoActivity extends AppCompatActivity implements IInterventoActivity {
@Override
protected void onResume() {
super.onResume();
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
private Bundle dataA = null;
@Override
public void setDataAAndFinish(whateverType data) {
dataA = data;
Intent intent = new Intent();
intent.putExtra("data", data)
setResult(RESULT_OK, intent);
finish();
}
}
设置activityA请求并接受来自ActivityB的返回
首先,为结果启动activityB而不是正常启动
Intent i = new Intent(this, ActivityB.class);
startActivityForResult(i, 1);
然后读取结果
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == 1) {
if(resultCode == RESULT_OK) {
whateverType data = data.getStringExtra("data");
}
}
}
现在来自 fragment
((IActivityB)getActivity()).setDataAAndFinish(myDatas);
关于java - onActivityResult 将数据从 fragment 返回到 Activity ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49918582/