一、适配器(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