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

本文详细介绍了一种在Android开发中实现Fragment与宿主Activity数据交互的方法,通过自定义接口和回调机制,实现在搜索功能触发时,动态更新不同TabLayout下的Fragment数据,同时传递搜索内容和位置信息。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值