Android - 接口回调 interface(类外部接口)
生活随笔
收集整理的這篇文章主要介紹了
Android - 接口回调 interface(类外部接口)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
- 鏈接是類內部的接口:https://blog.csdn.net/u012246458/article/details/91446288
- 下面是類外部的接口→
介紹:
使用接口的核心原因:為了能夠向上轉型為多個基類型。即利用接口的多實現,可向上轉型為多個接口基類型。
(1)Java是繼承的,接口Interface是可以多個的,恰恰彌補了這個缺點。
(2)回調,接口Interface里面的是抽象方法,需要回調進行相應操作。
網上找的圖片 感覺不錯,通過圖片可以很清晰的理解接口回調。
?
接口回調是什么?
接口回調是指:可以把使用某一接口的類創建的對象的引用賦給該接口聲明的接口變量,那么該接口變量就可以調用被類實現的接口的方法。實際上,當接口變量調用被類實現的接口中的方法時,就是通知相應的對象調用接口的方法,這一過程稱為對象功能的接口回調。看下面示例。
簡單的例子
1、定義一個接口類,規定這個接口暴露的方法
package test.ban.com.callback.SimpleCallBack;/*** Created by apple on 16/8/30.*/public interface CallBack {void doSomeThing(String string);}2、定義一個接口幫助類,接口幫助類有方法里面有個參數以是這個接口類型的(即: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即將發送的數據。";mCallBack.doSomeThing(info);}}3、具體調用類,及通過接口傳遞數據,回調到哪個地方
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后調用CallBackUtils的doCallBackMethod()方法。new Handler().postDelayed(new Runnable() {@Overridepublic void run() {/*** 調用doCallBackMethod方法,目的是將SimpleCallBackTest注冊到接口那里,* 使接口知道,需要調用的是哪個類中的,實現該接口的方法。* 調用CallBackUtils.doCallBackMethod()即調用了CallBack.doSomeThing(info)方法;* 通過接口就可以把數據傳輸到這個類里的doSomeThing()方法里。*///CallBackUtils.doCallBackMethod();}}, 1000);}@Overridepublic void doSomeThing(String string) {Log.e("========", "拿到CallBackUtils的傳遞過來的數據=====" + string);} }復雜點的實現例子
1、首先也是定義一個接口(即回調接口)
<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使其得知,是從哪里注冊過來的,然后根據其來源調用其實現的接口方法。//如下,此時調用的就是MainActivity.this中實現的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、兩種實現方式。第二種方式即找個匿名接口實現類幫助我們()
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);/*** 實例化控件*///實現方式一 (推薦)onLincoln();//實現方式二//onLincolnTwo();}/*** 實現方式一 這個需要 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();/**調用StartDownLoad方法,目的是將MainActivity注冊到接口那里,使接口知道,需要調用的是哪個類中的實現該接口的方法。*/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();}/**---------------------實現方式一 結束------------------------*//*** --------------------------實現方式二-----------------------------*/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();}};/**-----------------------------------------------------------------------------*/}?
總結
以上是生活随笔為你收集整理的Android - 接口回调 interface(类外部接口)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 免费的手游联运系统可以使用吗?
- 下一篇: android sina oauth2.