Android - 接口回调 interface(类外部接口)
生活随笔
收集整理的這篇文章主要介紹了
Android - 接口回调 interface(类外部接口)
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
- 鏈接是類內(nèi)部的接口:https://blog.csdn.net/u012246458/article/details/91446288
- 下面是類外部的接口→
介紹:
使用接口的核心原因:為了能夠向上轉(zhuǎn)型為多個基類型。即利用接口的多實(shí)現(xiàn),可向上轉(zhuǎn)型為多個接口基類型。
(1)Java是繼承的,接口Interface是可以多個的,恰恰彌補(bǔ)了這個缺點(diǎn)。
(2)回調(diào),接口Interface里面的是抽象方法,需要回調(diào)進(jìn)行相應(yīng)操作。
網(wǎng)上找的圖片 感覺不錯,通過圖片可以很清晰的理解接口回調(diào)。
?
接口回調(diào)是什么?
接口回調(diào)是指:可以把使用某一接口的類創(chuàng)建的對象的引用賦給該接口聲明的接口變量,那么該接口變量就可以調(diào)用被類實(shí)現(xiàn)的接口的方法。實(shí)際上,當(dāng)接口變量調(diào)用被類實(shí)現(xiàn)的接口中的方法時,就是通知相應(yīng)的對象調(diào)用接口的方法,這一過程稱為對象功能的接口回調(diào)。看下面示例。
簡單的例子
1、定義一個接口類,規(guī)定這個接口暴露的方法
package test.ban.com.callback.SimpleCallBack;/*** Created by apple on 16/8/30.*/public interface CallBack {void doSomeThing(String string);}2、定義一個接口幫助類,接口幫助類有方法里面有個參數(shù)以是這個接口類型的(即:CallBack)?
package test.ban.com.callback.SimpleCallBack;/*** Created by apple on 16/8/30.*//*** 作者:ban on 16/8/30 16:58*/ public class CallBackUtils {private static CallBack mCallBack;public static void setCallBack(CallBack callBack) {mCallBack = callBack;}public static void doCallBackMethod(){String info = "這里CallBackUtils即將發(fā)送的數(shù)據(jù)。";mCallBack.doSomeThing(info);}}3、具體調(diào)用類,及通過接口傳遞數(shù)據(jù),回調(diào)到哪個地方
package test.ban.com.callback.SimpleCallBack;/*** Created by apple on 16/8/30.*/import android.app.Activity; import android.os.Bundle; import android.os.Handler; import android.util.Log;/*** 作者:ban on 16/8/30 16:58*/ public class SimpleCallBackTest extends Activity implements CallBack {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);CallBackUtils.setCallBack(this);//1s后調(diào)用CallBackUtils的doCallBackMethod()方法。new Handler().postDelayed(new Runnable() {@Overridepublic void run() {/*** 調(diào)用doCallBackMethod方法,目的是將SimpleCallBackTest注冊到接口那里,* 使接口知道,需要調(diào)用的是哪個類中的,實(shí)現(xiàn)該接口的方法。* 調(diào)用CallBackUtils.doCallBackMethod()即調(diào)用了CallBack.doSomeThing(info)方法;* 通過接口就可以把數(shù)據(jù)傳輸?shù)竭@個類里的doSomeThing()方法里。*///CallBackUtils.doCallBackMethod();}}, 1000);}@Overridepublic void doSomeThing(String string) {Log.e("========", "拿到CallBackUtils的傳遞過來的數(shù)據(jù)=====" + string);} }復(fù)雜點(diǎn)的實(shí)現(xiàn)例子
1、首先也是定義一個接口(即回調(diào)接口)
<pre name="code" class="java">package test.ban.com.callback;/*** Created by apple on 16/8/30.*/import android.graphics.Bitmap;/*** 作者:ban on 16/8/30 16:10*/ public interface ImageStateInterface {void onImageStart();void onImageSuccess(Bitmap bitmap);void onImageFailed();void OnEnd(); }2、幫助類
package test.ban.com.callback;/*** Created by apple on 16/8/30.*/import android.content.Context; import android.graphics.Bitmap; import android.graphics.BitmapFactory;/*** 作者:ban on 16/8/30 16:11*/ public class DownloadImageUtil {public static void StartDownLoad(final ImageStateInterface imageStateInterface,final Context context) {//該imageStateInterface使其得知,是從哪里注冊過來的,然后根據(jù)其來源調(diào)用其實(shí)現(xiàn)的接口方法。//如下,此時調(diào)用的就是MainActivity.this中實(shí)現(xiàn)的onImageStart方法。imageStateInterface.onImageStart();new Thread(new Runnable() {@Overridepublic void run() {try {new Thread().sleep(5000);} catch (InterruptedException e) {e.printStackTrace();}Bitmap bitmap = BitmapFactory.decodeResource(context.getResources(), R.mipmap.ic_launcher);imageStateInterface.onImageSuccess(bitmap);}}).start();imageStateInterface.OnEnd();} }3、兩種實(shí)現(xiàn)方式。第二種方式即找個匿名接口實(shí)現(xiàn)類幫助我們()
package test.ban.com.callback;/*** Created by apple on 16/8/30.*/import android.annotation.SuppressLint; import android.app.Activity; import android.graphics.Bitmap; import android.graphics.drawable.BitmapDrawable; import android.os.Bundle; import android.util.Log; import android.view.View; import android.widget.Button; import android.widget.TextView; import android.widget.Toast;/*** 作者:ban on 16/8/30 16:10*/ public class MainActivity extends Activity implements ImageStateInterface {private Button button;private TextView mTextView;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);/*** 實(shí)例化控件*///實(shí)現(xiàn)方式一 (推薦)onLincoln();//實(shí)現(xiàn)方式二//onLincolnTwo();}/*** 實(shí)現(xiàn)方式一 這個需要 implements ImageStateInterface 接口*/private void onLincoln() {button = (Button) findViewById(R.id.button);mTextView = (TextView) findViewById(R.id.tv);button.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {DownloadImageUtil downloadImageUtil = new DownloadImageUtil();/**調(diào)用StartDownLoad方法,目的是將MainActivity注冊到接口那里,使接口知道,需要調(diào)用的是哪個類中的實(shí)現(xiàn)該接口的方法。*/downloadImageUtil.StartDownLoad(MainActivity.this,getApplicationContext());}});}@Overridepublic void onImageStart() {Log.d("lincoln", "onImageStart");button.setText("onImageStart");mTextView.setText("onImageStart");}@Overridepublic void onImageSuccess(final Bitmap bitmap) {Log.d("lincoln", "onImageSuccess");runOnUiThread(new Runnable() {@SuppressLint("NewApi")@Overridepublic void run() {button.setText("onImageSuccess");mTextView.setText("onImageSuccess");button.setBackground(new BitmapDrawable(bitmap));}});}@Overridepublic void onImageFailed() {}@Overridepublic void OnEnd() {Toast.makeText(MainActivity.this, "完成啦!!", Toast.LENGTH_SHORT).show();}/**---------------------實(shí)現(xiàn)方式一 結(jié)束------------------------*//*** --------------------------實(shí)現(xiàn)方式二-----------------------------*/private void onLincolnTwo() {button = (Button) findViewById(R.id.button);button.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {DownloadImageUtil.StartDownLoad(imageInterface,MainActivity.this);}});}ImageStateInterface imageInterface = new ImageStateInterface() {@Overridepublic void onImageStart() {Log.d("lincoln", "onImageStart");button.setText("onImageStart");}@Overridepublic void onImageSuccess(final Bitmap bitmap) {Log.d("lincoln", "onImageSuccess");runOnUiThread(new Runnable() {@SuppressLint("NewApi")@Overridepublic void run() {button.setText("onImageSuccess");button.setBackground(new BitmapDrawable(bitmap));}});}@Overridepublic void onImageFailed() {}@Overridepublic void OnEnd() {Toast.makeText(MainActivity.this, "哈哈!!", Toast.LENGTH_SHORT).show();}};/**-----------------------------------------------------------------------------*/}?
總結(jié)
以上是生活随笔為你收集整理的Android - 接口回调 interface(类外部接口)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 免费的手游联运系统可以使用吗?
- 下一篇: 房源管理系统服务器,房源管理系统服务器