Android 定义接口通知之Activity中刷新Fragment数据

      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等应该都有自己的实现方法。

你可能感兴趣的:(TabLayout,定义接口通知)