1. 程式人生 > >android 萬能回撥介面

android 萬能回撥介面

<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);
		}
	}






相關推薦

android 萬能介面

<span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);">剛做android開發時經常遇到資料傳遞的問題,因為對Java也不是很熟

Android中點選事件介面踩坑心得

有時候寫程式碼的時候有這樣的功能要求,如在ListView或recyclerView中的Item中的控制元件(如Button,TextView)上添加回調介面事件。其實難點就在添加回調介面事件上,怎麼寫介面,介面回撥在哪裡,這才是關鍵。下面是個例子: 介面的寫法:一下是兩介

[Android]RecyclerView基本使用+adapter介面實現點選事件

一、概述 RrcyclerView是ListView的加強版,不僅可以輕鬆實現和ListView同樣的效果,還優化了ListView中存在的各種不同之處。 Android官方推薦我們使用RecyclerView。 二、基本用法 1.首先需要在專案的build.gradle中新增相

Android 抽象函式以及介面更新UI

回撥函式使用,使得程式碼變得部分跟不變部分更加明顯,程式碼整體上有一個質的提升。 我是用抽象類裡寫的抽象回撥函式,通過通知註冊介面形式,可以隨時傳遞資料,接受資料。 同時我用介面函式回撥更新UI。下面

android中的-介面

發現很多初學者對於回撥,介面,抽象  等概念理解的不是很透徹。 今天就以我的經驗把 介面回撥給大家闡述一下。適合初學者看看。 先簡單說說我的理解吧,   所謂的介面回撥。 你先將介面定義好,然後在特定的條件下條用它。  可能很多初學者開始的時候很疑惑,其實這也東西你天天都在

android介面筆記

上圖: 佈局檔案: <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/too

Android中Service與Activity的通訊---介面方式

最近在技術交流群中有人問到:要實現service與activity的高強度通訊用什麼方法? 群友回答的是用handler,但面試官好像不太滿意,後來本人查找了下資料,得到個人的結論:service與activity之前的通訊方式有很多,回撥介面方式、觀察者模式、廣播、還有h

android 介面學習(自定義Dialog 獲取資料資料)

功能: 將單獨的一個Dialog提取出來以複用程式碼,然後在activity中去new 一個Dialog出來,能夠獲取Dialog選取的資料; 具體實現 TopicSingleChoiceDialog.java private int topicID=

C#POST 支付寶/微信介面

一般支付寶/微信的回撥介面都會返回xml格式,下面是呼叫類似這種介面的辦法: public async Task<string> GetData() { string requestUrl = "http://localhost:xxx/xx/xxxx/xxx/xxxx

淺析微信支付:申請退款、退款介面、查詢退款

本文是【淺析微信支付】系列文章的第八篇,主要講解商戶如何處理微信申請退款、退款回撥、查詢退款介面,其中有一些坑的地方,會著重強調。 淺析微信支付系列已經更新七篇了喲~,沒有看過的朋友們可以看一下哦。 淺析微信支付:查詢訂單和關閉訂單 淺析微信支付:支付結果通知 淺析微信支付:統一下單介面

Android 頁面跳轉(startActivityForResult)

轉載自: https://blog.csdn.net/oZhuiMeng123/article/details/80721284 1.頁面回撥原理 原理很簡單: 由ActivityA通過startActivityForResult方法進行跳轉到ActivityB,在Activi

Android camera2 imagereader 從Image拿到YUV資料轉化成RGB,生成bitmap並儲存

ImageUtil.java import android.graphics.ImageFormat; import android.media.Image; import android.os.Build; import android.support.annotation.RequiresApi;

Android如何編碼後的音視訊資料

有開發者提到,在推送RTMP推送端的基礎上,希望能回撥編碼後的音視訊資料,便於開發者對接第三方系統,如GB28181. 為此,我們加了一下介面: 1. 設定音視訊callback 對應介面: /** * Set Audio Encoded Data Callba

第三方支付平臺支付介面介面開發

作為開放式的B/S架構程式,無論所屬電商,金融,機械製造,企業OA,ERP,CRM,CMS等等行業或系統中,第三方支付以及銀聯支付的業務一定是客戶關心所在,也是保證客戶系統盈利運營的一個重要保障。通常這種B2C或者C2C系統的開發,商戶使用者所關注的支付平臺大多離不開“阿里支付寶,快錢,騰訊財付通,易寶支

解決:接入微信支付,調不起介面WXPayEntryActivity

最近開發公司SDK需要接入微信支付功能,於是上了微信開發者平臺,下載微信的SDK,按著文件接入。當我進行微信支付,需要調起微信客戶端,但是卻沒有。而微信回撥WXPayEntryActivity也沒有被回撥起來。這就很奇怪了,看回文件,說要把WXPayEntryActivity

一個自定義dialog提供確定和取消按鈕的介面

public class MessageDialog { Context context; AlertDialog dialog; AlertDialog.Builder bu

詳解Android機制與RecyclerView的Item點選事件實現

總是看書上寫著回調回調,以為就是函式呼叫換了個名字,尤其是看了Button的點選事件實現後,覺得不就是觸發機制。 A事件發生->後臺處理邏輯->告訴前臺怎麼做->結束。 Android常見button點選事件: loginB

基於Fragment介面委託工作任務給託管Activity

要委託工作任務給託管activity,通常的做法是由fragment定義名為Callbacks的回撥介面。 回撥介面定義fragment委託給Activity處理的工作任務。 任何打算託管fragment的Activity都必須實現它。 有了回撥介面,就不

android利用函式在對話方塊中傳遞資料

android開發中,往往需要在當前activity中開啟一個輸入框來獲取使用者資料,但是怎麼將輸入框的資料傳遞到activity中呢? 一種方法是建立一個全域性變數,在對話方塊中將資料傳遞給靜態全域性變數,然後在當前activity中使用它。這種方式繁瑣而且

Spring生命週期不可不知的介面

上回說到 Spring bean生命週期中的InitializingBean介面,我們瞭解到這只是spring bean生命週期中修改bean的諸多方式之一,其實在整個生命週期中,修改bean的方式大致有如下幾種: 實現 InitializingBean介面 的 afterPropertiesSet