1. 程式人生 > >Android中介面回撥、方法回撥

Android中介面回撥、方法回撥

在android開發中我們很多地方都用到了方法的回撥,回撥就是把方法的定義和功能匯入實現分開的一種機制,目的是為了解耦他的本質是基於觀察者設計模式,即觀察者設計模式的的簡化版,例如:在下載時候的進度回撥,在adapter與activity之間的回撥,在javabean和fragment以及fragment之間的回撥等等,回撥的目的主要有兩個:其一是傳遞資料,其二是保持資料的同步更新。常用的有兩種形式,一是使用內部類的形式,得到介面的子類物件,另一種是直接實現定義的介面。

一、內部類的形式

1、在需要傳遞資料的一端定義一個介面,接口裡面些需要監聽的方法以及引數。

2、定義一個的介面型別的變數儲存資料。

3、建立一個公共的方法,讓外部呼叫,並且傳遞介面型別的引數,給其定義的介面型別的資料初始化。

    /**
     * 定義一個介面
     */
    public interface   onListener{
        void OnListener(String code,String msg);
    }

    /**
     *定義一個變數儲存資料
     */
    private  onListener listener;

    /**
     *提供公共的方法,並且初始化介面型別的資料
     */
    public void setListener( onListener listener){
        this.listener =  listener;
    }

4、在合適的位置呼叫接口裡面的方法,傳遞資料。

        /**
         * 在合適的位置給其呼叫介面,給其賦值
         */
        if (listener!=null) {
            listener.OnListener(rtncode,rtnmsg);
        }
5、在需要獲取資料的地方,建立物件調方法。
    Print print = new Print();
    print.setListener(new PrintTicket.onListener() {
        @Override
        public void OnListener(String code, String msg) {
            //在這裡獲取資料進行處理
        }
    });
二、實現介面的形式
1、定義一個介面,可以另起包名,或者定義在類裡面。
    /**
     * 定義一個介面
     */
    public interface   onListener{
        void OnListener(String code,String msg);
    }
2、在需要傳遞資料的一端的構造方法對介面進行初始化。
    public Print(OnListener listener) {
        this.listener = listener;
    }

3、在合適的位置呼叫接口裡面的方法,傳遞資料。

        /**
         * 在合適的位置給其呼叫介面,給其賦值 
         */
        if (listener!=null) {
            listener.OnListener(rtncode,rtnmsg);
        }
4、在需要獲取資料的地方建立物件傳遞引數。
 Print print = new Print(this);
這裡面的this代指的是當前頁面的activity,如果是fragment的話,需要重寫onAttach方法對其進行初始化,強制型別轉換後獲取介面物件。此時在構造方法裡面傳遞介面得資料listener,如下二選一。
    @Override
    public void onAttach(Activity activity) {
        super.onAttach(activity);
        OnListener listener = (OnListener) activity;
    }

    @Override
    public void onAttach(Context context) {
        OnListener listener = (OnListener) activity;
    }
注意:直接在fragment裡面進行獲取當前fragment所在的activity,呼叫getActivity進行強轉或者直接傳遞會報錯。報的錯誤為型別轉換錯誤。

5、讓activity實現此介面,重寫其抽象方法,在抽象法裡面處理任務。

    @Override
    public void OnListener(String rtncode, String rtnmsg) {
        //在這裡獲取資料進行處理
    }

以上兩個回撥方法適用於兩個類之間的資料傳遞,現在來看看三個類之間的資料傳遞,javabean——>activity——>fragment之間的資料傳遞。需求:在javabean中獲取資料,當點選fragment按鈕時候,要求顯示獲取的資料進行相關業務處理。步驟如下:

1、新建一個包,定義一個介面,定義相關方法。

2、在javabean的構造方法中對介面進行初始化,並在適當的位置呼叫一下介面中的方法。

3、在fragment中重寫onAttach,對介面進行初始化,強轉為介面型別。

4、建立物件,傳遞引數為3中強轉的介面型別。

5、讓acitivity實現介面,重寫抽象方法,在方法中進行資料的處理。

具體程式碼就省略了……

具體應用見:http://blog.csdn.net/yoonerloop/article/details/52127143點選開啟連結

相關推薦

Android介面方法

在android開發中我們很多地方都用到了方法的回撥,回撥就是把方法的定義和功能匯入實現分開的一種機制,目的是為了解耦他的本質是基於觀察者設計模式,即觀察者設計模式的的簡化版,例如:在下載時候的進度回撥,在adapter與activity之間的回撥,在javabean和fr

對於Android介面機制的理解

對於介面回撥機制首先要弄明白的問題是為什麼需要它,也就是介面回撥能為我們解決什麼問題: 在開發過程中我們經常會遇到一些有關觸發執行的問題,比如使用者觸發按鈕,然後程式就執行了一系列的操作的比如註冊登入啊;問題的核心在於為什麼是出發了按鈕才執行,不觸發就不執行嗎? 這個時候就能體現出各

AndroidService與Activity的通訊---介面方式

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

JavaScript踩坑筆記10---同步非同步

JavaScript踩坑筆記10---同步回撥、非同步回撥 同步回撥: 非同步回撥: 同步回撥: 同步回撥指的是,回撥函式和主函式的執行是同步的,回撥函式在主函式內執行,並且主函式要等回撥函式執行完畢以後,才能執行。 舉例說明。 // 定

Android使App高速簡單地支持新浪微博微信QQfacebook等十幾個主流社交平臺的分享功能

分析 ont renren androidm mod 執行 xen 12px 操作 前言 在如今的APP或者遊戲中,分享功能差點兒已經成為標配。分享功能不但能夠滿足用戶的需求。也能夠為產品帶來很多其它的用戶,甚至能夠對用戶的行為、活躍度、年齡段等情況進行數據統計,使得軟

線性多項式

數學模型 梯度 數值 簡化 數據 .html 屬於 技術分享 模型 前言 以下內容是個人學習之後的感悟,如果有錯誤之處,還請多多包涵~ 簡介 回歸屬於有監督學習中的一種方法。該方法的核心思想是從連續型統計數據中得到數學模型,然後將該數學模型

Python類的屬性方法及內置方法

包含 obj urn 資源 tin 初始化 方式 Coding 特性 1.類的屬性 成員變量 對象的創建 創建對象的過程稱之為實例化,當一個對象被創建後,包含三個方面的特性對象聚丙屬性和方法, 句柄用於區分不同的對象, 對象的屬性和方法,與類中的成員變量和成員函數對應, o

機器學習(三)—線性邏輯Softmax歸 的區別

樣本 自變量 進行 方便 線性回歸 https 參數 常用方法 等價 1、什麽是回歸?   是一種監督學習方式,用於預測輸入變量和輸出變量之間的關系,等價於函數擬合,選擇一條函數曲線使其更好的擬合已知數據且更好的預測未知數據。 2、線性回歸   代價函數(平方誤差代價函

《機器學習》學習筆記(一):線性邏輯

ros XA andrew ID learn 給定 編程練習 size func 《機器學習》學習筆記(一):線性回歸、邏輯回歸 本筆記主要記錄學習《機器學習》的總結體會。如有理解不到位的地方,歡迎大家指出,我會努力改正。 在學習《機器學習》時,我主要是

Androidvisibility屬性VISIBLEINVISIBLEGONE的區別

int ase htm wid 分享 log img enc 1.0 在Android開發中,大部分控件都有visibility這個屬性,其屬性有3個分別為“visible ”、“invisible”、“gone”。主要用來設置控制控件的顯示和隱藏。有些人可能會疑惑Invi

安卓開發筆記(五)——資料儲存SharedPreference以及Android常見的檔案操作方法

中山大學資料科學與計算機學院本科生實驗報告 (2018年秋季學期) 一、實驗題目 個人專案3 資料儲存(一)應用開發 二、實現內容 第九周任務 實驗目的 學習SharedPreference的基本使用。 學習Android中

oracle的閃查詢資料庫(轉)

/* 一、 要使用閃回查詢,資料庫必須開啟automatic undo management,必須有undo表空間,必須設定好回滾段的保留時間 */ -- 在sqlplus中檢視undo_management引數值是否為AUTO,如果是“MANUAL”手動,需要修改為“A

python類的屬性方法結構以及靜態方法

一、類屬性 在Python中一切皆物件,類也是一個物件--->類物件,在程式執行中,類物件在記憶體中只有一份,通過它可以創建出很多個物件例項,除了封裝例項和屬性的方法外,類物件還可以擁有自己的屬性和方法:類屬性和類方法 通過類名的方式可以直接訪問類的屬性 類屬性其

Android 使用RxJava呼叫onNext()方法後又呼叫onError()方法

android.content.res.Resources$NotFoundException: String resource ID #0x7d0 問題描述:專案中使用的是Rxjava1.0+和retrofit2.0+搭建的網路請求框架。有一個頁面獲取到網路資料後及Rxj

Androidview的LeftTopRightBottom

 View:getLeft()、getTop()、getRight()、getBottom() 這幾個方法表示的具體座標值容易混淆,故現在記下來 看下圖佈局,相對佈局中含有ImageView,ImageView的getLeft()、getTop()、getRight()

AndroidBitMap的左右上下映象

public  Bitmap mirrorConvert(Bitmap srcBitmap,int flag) {         //flag: 0 左右翻轉,1 上下翻轉         Matrix matrix = new Matrix();         if (

spring 事務程式碼

1、遇到的問題   當我們一個方法裡面有多個數據庫儲存操作的時候,中間的資料庫操作發生的錯誤。虛擬碼如下: public method() { Dao1.save(Person1); Dao1.save(Person2); Dao1.save(P

AndroidPath類的lineTo方法和quadTo方法畫線的區別

   當我們需要在螢幕上形成畫線時,Path類的應用是必不可少的,而Path類的lineTo和quadTo方法實現的繪製線路形式也是不一樣的,下面就以程式碼的實現來直觀的探究這兩個方法的功能實現區別;    1. Path--->quadTo(float x1, fl

Android隱藏螢幕鍵盤的方法

Android中需要隱藏鍵盤的時候(這裡有兩個事件(方法)可以用來對鍵盤進行隱藏和顯示): /** * 隱藏鍵盤 * 彈窗彈出的時候把鍵盤隱藏掉 */ protected void hideInputKeyboard(View v) { InputMethodManager

Android 的升級資料庫最佳方法實踐

package com.activitytest.databasetest; import android.content.Context; import android.database.sqlite.SQLiteDatabase; import andr