在google官方中已经说明坚决不要使用fragment之间直接通信的方式,目前fragment之间的通信方式很多有广播 普通接口 eventBus handler static变量,但是前段时间学习了动脑学院中讲到了万能接口,普通接口的升级版,觉得很方便 很使用,今天记录一下。
1 建立基类:
首先定义一个 abstract 的Function类,包含一个String 变量 ,和一个构造函数,主要就是一会四个类(有(无)参数有(无)返回值)要继承这个Function类,将String变量传递过来。
Function.java:
package com.example.lsw.fragmentconnect;
public abstract class Function {
public String mFunctionName = null;
/*
* 构造方法
* @param functionName 接口的名字,必须实现
*/
Function(String functionName) {
this.mFunctionName = functionName;
}
}
2 根据方法的四种类型创造四个abstract 类:
FunctionNoParamNoResault.java:
package com.example.lsw.fragmentconnect;
public abstract class FunctionNoParamNoResault extends Function{
public FunctionNoParamNoResault(String functionName){
super(functionName);
}
//没有实现的函数体,具体的实现就交给了继承自它的类的函数体。
public abstract void function();
}
FunctionNoParamWithResault.java :
package com.example.lsw.fragmentconnect;
// Resulte 返回值为泛型
public abstract class FunctionNoParamWithResault<Resulte> extends Function{
public FunctionNoParamWithResault(String functionName) {
super(functionName);
}
public abstract Resulte function();
}
FunctionWithParamNoResault.java:
package com.example.lsw.fragmentconnect;
// Param 参数为泛型
public abstract class FunctionWithParamNoResault<Param> extends Function {
public FunctionWithParamNoResault(String functionName){
super(functionName);
}
public abstract void function(Param data);
}
FunctionWithParamWithResault.java:
package com.example.lsw.fragmentconnect;
// 带返回值和参数的泛型接口
public abstract class FunctionWithParamWithResault<Param, Resulte> extends Function{
public FunctionWithParamWithResault(String functionName) {
super(functionName);
}
public abstract Resulte function(Param data);
}
3 建立一个Fragment管理类,来实现管理这些接口,FragmnetManager一定要是单例的。
package com.example.lsw.fragmentconnect;
import android.text.TextUtils;
import android.util.Log;
import java.util.HashMap;
public class FunctionManager {
private static FunctionManager instance = null;
private HashMap<String,FunctionNoParamNoResault> mFunctionNoParamNoResault = null;
private HashMap<String,FunctionNoParamWithResault> mFunctionNoParamWithResault = null;
private HashMap<String,FunctionWithParamNoResault> mFunctionWithParamNoResault = null;
private HashMap<String,FunctionWithParamWithResault> mFunctionWithParamWithResault = null;
private FunctionManager() {
mFunctionNoParamNoResault = new HashMap<>();
mFunctionNoParamWithResault = new HashMap<>();
mFunction