zoukankan      html  css  js  c++  java
  • 适配器(adapter)与fragment之间、fragment与activity之间的通信问题

    一、适配器(adapter)与fragment之间通信

    通过本地广播进行通信

    步骤如下

    在adapter中代码 

    声明本地广播管理 

    private LocalBroadcastManager localBroadcastManager
    在viewholder中初始化和建立通信intent
    localBroadcastManager = LocalBroadcastManager.getInstance(context);
    final Intent intent = new Intent(MessageFragment.LOCAL_BROADCAST);
    发送广播
    intent.putExtra("readIds", readIds);   //通知fragment,让它去调用queryCity()方法
    intent.putExtra("list", (Serializable) list);
    localBroadcastManager.sendBroadcast(intent); //发送本地广播 通知fragment该刷新了

    在fragment中代码
    private IntentFilter intentFilter;
    private LocalReceiver localReceiver; //本地广播接收者
    private LocalBroadcastManager localBroadcastManager; //本地广播管理者 可以用来注册广播

    private class LocalReceiver extends BroadcastReceiver {

    @Override
    public void onReceive(Context context, Intent intent) {

    String action = intent.getAction();
    if(!action.equals(LOCAL_BROADCAST)){
    return ;
    }
    String[] readIds =intent.getStringArrayExtra("readIds");
    List<Message> messages = (List<Message>) intent.getSerializableExtra("list");
    setList(messages,readIds);
    }
    }
    /**
    * 发送本地广播的action
    */
    public static final String LOCAL_BROADCAST = "com.xfhy.casualweather.LOCAL_BROADCAST";
    在onCreateView中初始化
    //获取LocalBroadcastManager   本地广播管理者实例
    localBroadcastManager = LocalBroadcastManager.getInstance(getContext());
    localReceiver = new LocalReceiver();
    intentFilter = new IntentFilter();
    intentFilter.addAction(LOCAL_BROADCAST); //添加action
    localBroadcastManager.registerReceiver(localReceiver,intentFilter);

    二、fragment与activity之间的通信问题

    通过回调函数

    在fragment中

    声明

    private CallBackValue callBackValue;
    /**
    * fragment与activity产生关联是 回调这个方法
    */
    @SuppressWarnings("deprecation")
    @Override
    public void onAttach(Activity activity) {
    // TODO Auto-generated method stub
    super.onAttach(activity);
    //当前fragment从activity重写了回调接口 得到接口的实例化对象
    callBackValue =(CallBackValue) getActivity();
    }
    //定义一个回调接口
    public interface CallBackValue{
    public void SendMessageValue(String strValue);
    }
    使用时调用
    callBackValue.SendMessageValue(response.getJSONObject("message_unread").getJSONObject("data").getString("unread_count"));
    在activity中
    重写方法
    @Override
    public void SendMessageValue(String strValue) {
    // TODO Auto-generated method stub
    if (strValue == "0" || strValue.isEmpty() || strValue.equals("0")) {
    count.setVisibility(View.GONE);
    } else {
    count.setText(strValue);
    count.setVisibility(View.VISIBLE);
    }

     原文参考 https://blog.csdn.net/xfhy_/article/details/61195558


  • 相关阅读:
    鼠标经过显示边框
    特殊字符
    HTML 列表
    embed 引入网上视频
    锚点定位
    盒子阴影
    Map的四种遍历方式
    Glide的 java.lang.RuntimeException: Expected instanceof GlideModule, but found:X.GlideModule@2e4554f
    Java标识符的命名规则
    django入门与实践
  • 原文地址:https://www.cnblogs.com/tflike/p/9552388.html
Copyright © 2011-2022 走看看