Android实现fragment向Activity实时传递信息

       平时,我们的项目中会经常用到fragment这个控件,一般情况下,我们将数据放在fragment里,而大部分UI在activity中,如果需要在数据改变时实时刷新我们的UI,那么就要用到framgent与Activity数据的传递了。

       常用的一般有三种方式来实现以上需求:

1. 通过fragment中brocastReceiver来通知activity刷新UI;

2. 通过eventbus订阅者模式来通知Activity实时刷新UI;

3. 通过fragment中编写接口设置监听器,然后在actvity中实现该接口,在接口方法中刷新UI即可


由于项目中集成了eventbus,所以取近弃远,通过一个例子来说明一下用法:

需求:通过fragment中recyclerview下拉刷新和上拉加载操作改变Activity中的FloatingActionButton的状态(即上拉隐藏fab,下拉显示)

fragment中:

recyclerView.setOnScrollListener(new RecyclerView.OnScrollListener() {
    @Override
    public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
        super.onScrolled(recyclerView, dx, dy);
        if(distance < -ViewConfiguration.getTouchSlop() && !visible){
            //显示fab
            EventBus.getDefault().postSticky("show_upload_view");
            distance = 0;
            visible = true;
        }else if(distance > ViewConfiguration.getTouchSlop() && visible){
            //隐藏
            EventBus.getDefault().postSticky("hide_upload_view");
            distance = 0;
            visible = false;
        }
        if ((dy > 0 && visible) || (dy < 0 && !visible))//向下滑并且可见  或者  向上滑并且不可见
            distance += dy;
    }
});
Activity中:

/**
 * by moos on 2017/10/18
 * func:通过eventbus将fragment消息返回到activity中刷新fab状态
 */
@Subscribe(threadMode = ThreadMode.MAIN, sticky = true)
public void changeUpLoadViewState(String state){
    loge("上传入口的state==="+state);
    if(state!=null ){
        if(state.equals("show_upload_view")){
            //显示
            showFABAnimation(bt_upload);
        }else if(state.equals("hide_upload_view")){
            //隐藏
            hideFABAnimation(bt_upload);
        }
    }
}


详细代码不贴了,只提供思路.

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值