Android 定义接口通知之Fragment中刷新改变宿主Activity UI
在一个搜索功能中往往会出现这样一个功能:顶部一个搜索功能,下面是一个TabLayout与ViewPager,VerPager承载着两个Fragment,随着TabLayout与ViewPager的滑动而传递信息告诉相应的Fragment要做的事情,点击顶部的搜索来刷新下面的两个Fragment的数据,并且还要传递搜索的内容和TabLayout的位置。下面我们来看看我的实现方式,若大家有更好的方法,希望可以不吝赐教:
1.activity中调用接口(两个Fragment,这里我写了两个回调接口,看情况使用):
if (linstenr!=null){//回调数据给Fragment
linstenr.listener(mPosition,et_search.getText().toString());
}
if (linstenr_dynamic!=null){//回调数据给Fragment
linstenr_dynamic.listener(mPosition,et_search.getText().toString());
}
在activity中实现接口:
ListenerDynamic linstenr_dynamic;
public void setLinstenr_dynamic(ListenerDynamic linstenr_dynamic) {
this.linstenr_dynamic = linstenr_dynamic;
}
Listener linstenr;
public void setLinstenr(Listener linstenr) {
this.linstenr = linstenr;
}
2.在Fragment中实现自己写的接口和一些方法:
public class FragmentA extends AbsBaseFragmentimplements ListenerDynamic{
//场面过于刺激,就不做展示了......
}
实现接口类后的回调方法及传递来的参数:
@Override
public void listener(int position, String content) {
String mContent = content;
String userId = PreferenceUtil.getInstance().getUserInfo().getUserId();
if(position == 0){//动态
ToastUtil.show(getActivity(), position + "----"+content);
page = 1;
getFindUserData(content,userId,page);
}else if(position == 1){//用户
}
}
给activity设置监听:
@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
SearchActivity mainActivity = (SearchActivity) activity;
mainActivity.setLinstenr_dynamic(this);
}
3.自定义接口(另一个与之相同):
/**
* Description:用于activity与Fragment的数据交互
* 如:activity中的按钮点击之后刷新Fragment中的数据
*
* @author SGF
* date:
*/
public interface ListenerDynamic {
void listener(int position, String content);
}
其它的方法一定有很多,时间原因只试了这一个方法,BroadcastReceiver、EventBus、sharedpreferences等应该都有自己的实现方法。