Android 如何将从另一个片段启动的片段中的数据传输到活动
我有一个活动调用另一个fragmentA。现在这个fragmentA调用另一个fragmentB。现在我想将数据从fragmentB传输到我的活动中 定义接口(在片段中) 为了允许片段与其活动通信,您可以在片段类中定义一个接口,并在活动中实现它。片段在其onAttach()生命周期方法期间捕获接口实现,然后可以调用接口方法以便与活动通信 以下是片段到活动通信的示例:Android 如何将从另一个片段启动的片段中的数据传输到活动,android,android-fragments,android-activity,Android,Android Fragments,Android Activity,我有一个活动调用另一个fragmentA。现在这个fragmentA调用另一个fragmentB。现在我想将数据从fragmentB传输到我的活动中 定义接口(在片段中) 为了允许片段与其活动通信,您可以在片段类中定义一个接口,并在活动中实现它。片段在其onAttach()生命周期方法期间捕获接口实现,然后可以调用接口方法以便与活动通信 以下是片段到活动通信的示例: public class HeadlinesFragment extends ListFragment { OnHeadl
public class HeadlinesFragment extends ListFragment {
OnHeadlineSelectedListener mCallback;
// Container Activity must implement this interface
public interface OnHeadlineSelectedListener {
public void onArticleSelected(int position);
}
@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
// This makes sure that the container activity has implemented
// the callback interface. If not, it throws an exception
try {
mCallback = (OnHeadlineSelectedListener) activity;
} catch (ClassCastException e) {
throw new ClassCastException(activity.toString()
+ " must implement OnHeadlineSelectedListener");
}
}
...
}
现在,片段可以通过使用OnHeadlineSelectedListener接口的mCallback实例调用onArticleSelected()方法(或接口中的其他方法)向活动传递消息
例如,当用户单击列表项时,将调用片段中的以下方法。片段使用回调接口将事件传递给父活动
@Override
public void onListItemClick(ListView l, View v, int position, long id) {
// Send the event to the host activity
mCallback.onArticleSelected(position);
}
实现接口(在活动中)
为了从片段接收事件回调,承载它的活动必须实现在片段类中定义的接口
例如,以下活动实现上述示例中的接口
public static class MainActivity extends Activity
implements HeadlinesFragment.OnHeadlineSelectedListener{
...
public void onArticleSelected(int position) {
// The user selected the headline of an article from the HeadlinesFragment
// Do something here to display that article
}
}
PS1:EventBus适用于您,但如果需要,请小心使用,它可能会使您的代码更难阅读
PS2:不要在Fragment.newInstance()中传递活动实例并使用它进行通信。活动实例可能在后台被销毁。在Fragment.onAttach()中获取活动实例与示例类似,框架将为您处理销毁、重新创建和重新绑定。您可以通过在fragmentB中调用
getActivity()
来获取活动实例,并使用接口传递数据 您可以通过重写onAttach()方法来获取活动实例
方法:1
@Override
public void onAttach(Activity activity) {
// TODO Auto-generated method stub
super.onAttach(activity);
this.activity=(ActivityName) activity;
}
及
或
方法:2
((ActivityName)getActivity()).setdata(yourdata);
通过这些方法,您需要在活动中创建setter方法
这是将任何片段回调到其父活动的最简单方法。Dev Doc对此做了很好的解释。如果您认为,您将需要在应用程序的不同部分使用类似的功能,并且您不想为这只海豚编写许多接口。 你可以用 例如: 添加编译“de.greenrobot:eventbus:2.4.0”, 登记参加活动 一旦创建-
EventBus.getDefault().register(this);
和OnDestroy-
EventBus.getDefault().unregister(this);
然后添加具有接收对象参数和onEventMainThread名称的方法:
public void onEventMainThread(YourObject name) {...}
现在从任何一个你可以打电话的地方
EventBus.getDefault().post(yourObjectInstance);
活动将检测到它
或者您可以使用RxJava获得类似的效果-
实现一个接口,在活动中重写它的方法,并从将数据传递给方法的片段调用它。片段A和B是同一活动的一部分吗?是的,两个片段属于同一活动activity@milezlink可以解决这个问题。跟着它!
EventBus.getDefault().post(yourObjectInstance);