您的位置:首页 > 移动开发 > Android开发

android 万能回调接口

2015-08-19 17:36 441 查看
<span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);">刚做android开发时经常遇到数据传递的问题,因为对Java也不是很熟悉,传递数据通过Intent或直接放到一个静态类中。</span>
后来才知道通过java接口回调来传输数据和做各种监听,后来看到Event Bus数据传输的框架受到了启发,自己弄了一个

简单的万能回调接口,自己感觉还不错。自己是个新手,欢迎各种菜鸟、小牛、大牛吐槽和指导!

1、先写个所以接口回调的都继承的BaseHandle

public abstract interface BaseHandle {

}


2、在写个管理所以接口回调的类

public class HandlerRegister {

private static HashMap<String, ArrayList<BaseHandle>> receiverPond = new HashMap<String, ArrayList<BaseHandle>>();

/**
* 注册新的handle
* @param handleName
*/
public static void addType(String handleName) {
try {
ArrayList<BaseHandle> itemList = new ArrayList<BaseHandle>();
receiverPond.put(handleName, itemList);
} catch (Exception e) {
e.printStackTrace();
}
}

/**
* 添加 handle
* @param key
* @param handle
*/
public static void setReceiver(String key,BaseHandle handle) {

try {
if (receiverPond.containsKey(key)) {
receiverPond.get(key).add(handle);
}else {
addType(key);
receiverPond.get(key).add(handle);
}
} catch (Exception e) {
e.printStackTrace();
}

}

/**
* 获取已经存在的handle
* @param key
* @return
*/
public static ArrayList<BaseHandle> getReceiver(String key) {
return receiverPond.get(key);
}

/**
* 删除单个handle
* @param key
* @param handle
*/
public static void deleteHandle(String key,BaseHandle handle) {
try {
if (!receiverPond.containsKey(key)) {
return;
}
receiverPond.get(key).remove(handle);
} catch (Exception e) {
e.printStackTrace();
}

}

/**
* 删除key下所有handle
* @param key
*/
public static void deleteAllHandle(String key) {
try {
receiverPond.remove(key);
} catch (Exception e) {
e.printStackTrace();
}
}
}


3、根据自己需要的传递的数据去创建回调接口并继承BaseHandle

public interface BuyServiceHandle extends BaseHandle{
public static final String BUYSERVICE_HANDLE_KEY = "buyservice_handle";
public void buyResult(String uid);

}
4、注册回调接口,谁使用谁注册

BuyServiceHandle mBuyServiceHandle = new BuyServiceHandle() {

@Override
public void buyResult(final String uid) {
updateDoctor(uid);

}

};
HandleRegister.setReceiver(BuyServiceHandle.BUYSERVICE_HANDLE_KEY, mBuyServiceHandle);


5、发送数据

private void informUpdateDoctorList(String uid) {
ArrayList<BaseHandle> handleList = HandleRegister.getReceiver(BuyServiceHandle.BUYSERVICE_HANDLE_KEY);
if (handleList == null) {
return;
}
for (BaseHandle temp:handleList) {
((BuyServiceHandle)temp).buyResult(uid);
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息