思路是网上的大牛给提出来的,但是没有具体的实现。
出处: http://bbs.csdn.net/topics/390389303
android fragment 启动另一个fragment,我怎么在第一个fragment中得到第二个 fragment回传的数据呢
androidr的开发者最喜欢使用广播进行界面或者UI间传数据,这种做法虽然实现简 单,但是是一个非常山炮的方法.
在Activity传数据,我们可以使用Intent在onResultActivity获取,而在类与类 之间的传数据,我们可以使用接口.
而Fragment可以在A->B中,给B传一个接口,而接口的实现在A中实现,这样B处理完 后,调用A传来的接口就可以实现数据回传.
请LZ不要使用广播,如果这些地方都使用广播,整个系统都会被广播覆盖.
下面是我的理解和实现:
参考方法如下;
public class SelectUserFragmentextends DialogFragment {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = LayoutInflater.from(getActivity()).inflate(R.layout.select_user_fragment, null);
mListView = (ListView) view.findViewById(R.id.user_listview);
View footView = LayoutInflater.from(getActivity()).inflate(R.layout.select_user_footer,
null);
footView.setOnClickListener(OnClickListener);
mListView.addFooterView(footView);
.....
return view;
}
View.OnClickListener OnClickListener = new OnClickListener() {
@Override
public void onClick(View v) {
if (isChanged) {
mMyApplication.getDataSource().setPackageUsers(selectedUserLists);
if (mOperationListener != null) {
mOperationListener.onOperationClicked();
}
}
};
public void setOperationListener(OperationListener listener) {
mOperationListener = listener;
}
public interface OperationListener {
public void onOperationClicked();
}
}
public class FragmentDiet extends Fragment implements OperationListener {
fragment.setOperationListener(FragmentDiet.this);
@Override
public void onOperationClicked() {
showUserInfo();
showCategories();
}
}
按照我的理解做如下总结:
情景如下:
我们先生成一个界面或者类叫做A,由A跳转到一个类或者界面,我们叫做B。即是A -->B
我们在B上进行了某些操作之后,希望A来相应B的操作,来做一些事情。
对应方法如下;
我们在B中定义一个接口,但是在B中不实现它,在A中实现这个接口。当然在B中还要保存一个接口的实例对象,这个实例对象在A中进行初始化。在B中进行操作的时候,我们用B中这个实例对象,调用该接口中定义的方法,我们了解接口和继承的应该就会知道,这个时候,它实际调用的即是A中对这个方法的实现。
不知道讲明白了没...呵呵呵...
同样,我们可以继续发散。。。。
比如我们还有个C,D,E等等。这个CDE和A一样,有一个到B界面的跳转,在B界面上进行操作的时候,这些CDE要做不同的相应。
这个时候,我们就可以CDE等,分别实现B中的这个接口,来自定义自己的实现方法....
这样在B中,我只要调用接口对象的方法就行了,不需要管这个方法的具体实现是由谁来完成的(A,CDE等等)
“一个接口,多种方法”,这就是传说中的多态吧~~我是这样理解的~~