目前我在项目中使用片段。但仅对于搜索屏幕我使用单独的活动。我试图将该活动转换为片段。我的问题是目前我从像
这样的片段调用搜索活动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并发送回片段。我只能创建另一个片段并传递值。这样以前的价值就会下降。请让我解决我的问题。
在此附上截图:
答案 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);
这是一个简单的监听器,这是片段通信的方式,你可以在这里阅读更多关于此的内容
答案 1 :(得分:0)
在片段中,您使用" getActivity()"
getActivity().setResult(Activity.RESULT_OK, returnIntent);
答案 2 :(得分:0)
我脑子里浮现出两种方式:
1.使用localbroadcast将片段B中的值发送到片段A
2.搜索完成后将值存储在SharedPreferences上,并将其放在onResume上的片段中。
选择你的方式:)