Android 如何对碎片使用StartActivityForResult?
目前我正在我的项目中使用片段。但对于搜索屏幕,我单独使用单独的活动。我正在尝试将该活动转换为片段。我的问题是目前我正在调用类似片段的搜索活动Android 如何对碎片使用StartActivityForResult?,android,android-fragments,Android,Android Fragments,目前我正在我的项目中使用片段。但对于搜索屏幕,我单独使用单独的活动。我正在尝试将该活动转换为片段。我的问题是目前我正在调用类似片段的搜索活动 private void callLocationSearch() { Intent intent = new Intent(activity, SearchDataFilterActivity.class); intent.putExtra(Constants.RECEIVE_INTENT_DATA, activity.g
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
中,我得到结果并在搜索字段中设置。我在这个屏幕上有多个字段。所以我从搜索活动中搜索,并在这个片段中设置。现在我将搜索活动更改为片段。问题是我无法执行setResult并将其发送回fragment。我只能创建另一个片段并传递值。因此,前面的值将丢失。请告诉我解决我的问题的任何想法
随函附上截图:
第一个是碎片
二是搜索活动。
为了进一步澄清,我又附上了一张图片。
在片段中,您使用了“getActivity()
我突然想到两种方法: 1.使用localbroadcast将值从片段B发送到片段A
2.搜索完成后,将值存储在SharedReferences上,并在onResume中的片段中获取该值。
选择您的方式:)您应该使用侦听器,在片段B中您可以这样做
private OnSomethingSelectedListener mListener;
// Container Activity must implement this interface
public interface OnSomethingSelectedListener {
public void onSearchComplete(Result object or more params);
}
片段A(或应接收信息的类)应实现FragmentB.OnSomethingsSelectedListener和onSearchComplete方法。
在片段A或活动(当您创建片段B时)中,您可以将实例(片段A或活动)传递给片段B构造函数,如
FragmentB b = new FragmentB(this);
public FragmentB(OnSomethingSelectedListener listener) {
mListener = listener;
}
现在…在片段B中,您将使用
mListener.onSearchComplete(result);
这是一个简单的侦听器,这是进行片段通信的方式,您可以在这里阅读更多关于这方面的内容
您可以发布屏幕吗?我仍然无法想象它在屏幕截图上的样子。请检查。这是出于意图。但我问的是一个片段一个片段的问题。这是最好的做法,但遗漏了一件事。我认为最好是通过标记找到片段B,而不是构造新的片段,因为片段是由片段管理器添加或替换的。Cmiiw
mListener.onSearchComplete(result);