如何使用StartActivityForResult片段?

时间:2017-12-15 16:46:38

标签: android android-fragments

目前我在项目中使用片段。但仅对于搜索屏幕我使用单独的活动。我试图将该活动转换为片段。我的问题是目前我从像

这样的片段调用搜索活动
private void callLocationSearch() {
        Intent intent = new Intent(activity, SearchDataFilterActivity.class);
        intent.putExtra(Constants.RECEIVE_INTENT_DATA, activity.getResources().getString(R.string.location));
        startActivityForResult(intent, FOR_SEARCH_LOCATION);
    }

从搜索屏幕我设置结果并发送到上一个屏幕。

setResult(Activity.RESULT_OK, returnIntent);
finish();

这样在onActivityResult中我得到结果并在搜索字段中设置。我在这个屏幕上有多个字段。所以我从搜索活动中搜索并设置在这个片段中。现在我将搜索活动更改为Fragment。问题是我无法进行setResult并发送回片段。我只能创建另一个片段并传递值。这样以前的价值就会下降。请让我解决我的问题。

在此附上截图:

第一个是片段 Fragment Image

第二个是搜索活动。 Activity

为了更多说明,我又添了一张图片。 enter image description here

3 个答案:

答案 0 :(得分:1)

您应该在片段B中使用侦听器

private OnSomethingSelectedListener mListener;

// Container Activity must implement this interface
public interface OnSomethingSelectedListener {
    public void onSearchComplete(Result object or more params);
}

片段A(或应该接收信息的类)应该实现FragmentB.OnSomethingSelectedListener和onSearchComplete方法。 在片段A或活动中(当您创建片段B时),您可以将实例(片段A或活动)传递给片段B构造函数,如

FragmentB b = new FragmentB(this);

public FragmentB(OnSomethingSelectedListener listener) {
    mListener = listener;
}

现在......在Fragment B中而不是使用setResult,你将使用

mListener.onSearchComplete(result);

这是一个简单的监听器,这是片段通信的方式,你可以在这里阅读更多关于此的内容

Communicating with Other Fragments

答案 1 :(得分:0)

在片段中,您使用" getActivity()"

 getActivity().setResult(Activity.RESULT_OK, returnIntent);

答案 2 :(得分:0)

我脑子里浮现出两种方式: 1.使用localbroadcast将片段B中的值发送到片段A
2.搜索完成后将值存储在SharedPreferences上,并将其放在onResume上的片段中。

选择你的方式:)