当前位置:   article > 正文

Android - 接口回调 interface(类外部接口)_android 接口回调传值

android 接口回调传值

介绍:

使用接口的核心原因:为了能够向上转型为多个基类型。即利用接口的多实现,可向上转型为多个接口基类型。

(1)Java是继承的,接口Interface是可以多个的,恰恰弥补了这个缺点。

(2)回调,接口Interface里面的是抽象方法,需要回调进行相应操作。

网上找的图片 感觉不错,通过图片可以很清晰的理解接口回调。

 

接口回调是什么?

接口回调是指:可以把使用某一接口的类创建的对象的引用赋给该接口声明的接口变量,那么该接口变量就可以调用被类实现的接口的方法。实际上,当接口变量调用被类实现的接口中的方法时,就是通知相应的对象调用接口的方法,这一过程称为对象功能的接口回调。看下面示例。

简单的例子

1、定义一个接口类,规定这个接口暴露的方法

  1. package test.ban.com.callback.SimpleCallBack;
  2. /**
  3. * Created by apple on 16/8/30.
  4. */
  5. public interface CallBack {
  6. void doSomeThing(String string);
  7. }

2、定义一个接口帮助类,接口帮助类有方法里面有个参数以是这个接口类型的(即:CallBack) 

  1. package test.ban.com.callback.SimpleCallBack;/**
  2. * Created by apple on 16/8/30.
  3. */
  4. /**
  5. * 作者:ban on 16/8/30 16:58
  6. */
  7. public class CallBackUtils {
  8. private static CallBack mCallBack;
  9. public static void setCallBack(CallBack callBack) {
  10. mCallBack = callBack;
  11. }
  12. public static void doCallBackMethod(){
  13. String info = "这里CallBackUtils即将发送的数据。";
  14. mCallBack.doSomeThing(info);
  15. }
  16. }

3、具体调用类,及通过接口传递数据,回调到哪个地方

  1. package test.ban.com.callback.SimpleCallBack;/**
  2. * Created by apple on 16/8/30.
  3. */
  4. import android.app.Activity;
  5. import android.os.Bundle;
  6. import android.os.Handler;
  7. import android.util.Log;
  8. /**
  9. * 作者:ban on 16/8/30 16:58
  10. */
  11. public class SimpleCallBackTest extends Activity implements CallBack {
  12. @Override
  13. protected void onCreate(Bundle savedInstanceState) {
  14. super.onCreate(savedInstanceState);
  15. CallBackUtils.setCallBack(this);
  16. //1s后调用CallBackUtils的doCallBackMethod()方法。
  17. new Handler().postDelayed(new Runnable() {
  18. @Override
  19. public void run() {
  20. /**
  21. * 调用doCallBackMethod方法,目的是将SimpleCallBackTest注册到接口那里,
  22. * 使接口知道,需要调用的是哪个类中的,实现该接口的方法。
  23. * 调用CallBackUtils.doCallBackMethod()即调用了CallBack.doSomeThing(info)方法;
  24. * 通过接口就可以把数据传输到这个类里的doSomeThing()方法里。
  25. */
  26. //
  27. CallBackUtils.doCallBackMethod();
  28. }
  29. }, 1000);
  30. }
  31. @Override
  32. public void doSomeThing(String string) {
  33. Log.e("========", "拿到CallBackUtils的传递过来的数据=====" + string);
  34. }
  35. }

复杂点的实现例子

1、首先也是定义一个接口(即回调接口)

  1. <pre name="code" class="java">package test.ban.com.callback;/**
  2. * Created by apple on 16/8/30.
  3. */
  4. import android.graphics.Bitmap;
  5. /**
  6. * 作者:ban on 16/8/30 16:10
  7. */
  8. public interface ImageStateInterface {
  9. void onImageStart();
  10. void onImageSuccess(Bitmap bitmap);
  11. void onImageFailed();
  12. void OnEnd();
  13. }

2、帮助类

  1. package test.ban.com.callback;/**
  2. * Created by apple on 16/8/30.
  3. */
  4. import android.content.Context;
  5. import android.graphics.Bitmap;
  6. import android.graphics.BitmapFactory;
  7. /**
  8. * 作者:ban on 16/8/30 16:11
  9. */
  10. public class DownloadImageUtil {
  11. public static void StartDownLoad(final ImageStateInterface imageStateInterface,
  12. final Context context) {
  13. //该imageStateInterface使其得知,是从哪里注册过来的,然后根据其来源调用其实现的接口方法。
  14. //如下,此时调用的就是MainActivity.this中实现的onImageStart方法。
  15. imageStateInterface.onImageStart();
  16. new Thread(new Runnable() {
  17. @Override
  18. public void run() {
  19. try {
  20. new Thread().sleep(5000);
  21. } catch (InterruptedException e) {
  22. e.printStackTrace();
  23. }
  24. Bitmap bitmap = BitmapFactory.decodeResource(
  25. context.getResources(), R.mipmap.ic_launcher);
  26. imageStateInterface.onImageSuccess(bitmap);
  27. }
  28. }).start();
  29. imageStateInterface.OnEnd();
  30. }
  31. }

3、两种实现方式。第二种方式即找个匿名接口实现类帮助我们()

  1. package test.ban.com.callback;/**
  2. * Created by apple on 16/8/30.
  3. */
  4. import android.annotation.SuppressLint;
  5. import android.app.Activity;
  6. import android.graphics.Bitmap;
  7. import android.graphics.drawable.BitmapDrawable;
  8. import android.os.Bundle;
  9. import android.util.Log;
  10. import android.view.View;
  11. import android.widget.Button;
  12. import android.widget.TextView;
  13. import android.widget.Toast;
  14. /**
  15. * 作者:ban on 16/8/30 16:10
  16. */
  17. public class MainActivity extends Activity implements ImageStateInterface {
  18. private Button button;
  19. private TextView mTextView;
  20. @Override
  21. protected void onCreate(Bundle savedInstanceState) {
  22. super.onCreate(savedInstanceState);
  23. setContentView(R.layout.activity_main);
  24. /**
  25. * 实例化控件
  26. */
  27. //实现方式一 (推荐)
  28. onLincoln();
  29. //实现方式二
  30. //onLincolnTwo();
  31. }
  32. /**
  33. * 实现方式一 这个需要 implements ImageStateInterface 接口
  34. */
  35. private void onLincoln() {
  36. button = (Button) findViewById(R.id.button);
  37. mTextView = (TextView) findViewById(R.id.tv);
  38. button.setOnClickListener(new View.OnClickListener() {
  39. @Override
  40. public void onClick(View v) {
  41. DownloadImageUtil downloadImageUtil = new DownloadImageUtil();
  42. /**
  43. 调用StartDownLoad方法,目的是将MainActivity注册到接口那里,
  44. 使接口知道,需要调用的是哪个类中的实现该接口的方法。
  45. */
  46. downloadImageUtil.StartDownLoad(MainActivity.this,
  47. getApplicationContext());
  48. }
  49. });
  50. }
  51. @Override
  52. public void onImageStart() {
  53. Log.d("lincoln", "onImageStart");
  54. button.setText("onImageStart");
  55. mTextView.setText("onImageStart");
  56. }
  57. @Override
  58. public void onImageSuccess(final Bitmap bitmap) {
  59. Log.d("lincoln", "onImageSuccess");
  60. runOnUiThread(new Runnable() {
  61. @SuppressLint("NewApi")
  62. @Override
  63. public void run() {
  64. button.setText("onImageSuccess");
  65. mTextView.setText("onImageSuccess");
  66. button.setBackground(new BitmapDrawable(bitmap));
  67. }
  68. });
  69. }
  70. @Override
  71. public void onImageFailed() {
  72. }
  73. @Override
  74. public void OnEnd() {
  75. Toast.makeText(MainActivity.this, "完成啦!!", Toast.LENGTH_SHORT).show();
  76. }
  77. /**---------------------实现方式一 结束------------------------*/
  78. /**
  79. * --------------------------实现方式二-----------------------------
  80. */
  81. private void onLincolnTwo() {
  82. button = (Button) findViewById(R.id.button);
  83. button.setOnClickListener(new View.OnClickListener() {
  84. @Override
  85. public void onClick(View v) {
  86. DownloadImageUtil.StartDownLoad(imageInterface,
  87. MainActivity.this);
  88. }
  89. });
  90. }
  91. ImageStateInterface imageInterface = new ImageStateInterface() {
  92. @Override
  93. public void onImageStart() {
  94. Log.d("lincoln", "onImageStart");
  95. button.setText("onImageStart");
  96. }
  97. @Override
  98. public void onImageSuccess(final Bitmap bitmap) {
  99. Log.d("lincoln", "onImageSuccess");
  100. runOnUiThread(new Runnable() {
  101. @SuppressLint("NewApi")
  102. @Override
  103. public void run() {
  104. button.setText("onImageSuccess");
  105. button.setBackground(new BitmapDrawable(bitmap));
  106. }
  107. });
  108. }
  109. @Override
  110. public void onImageFailed() {
  111. }
  112. @Override
  113. public void OnEnd() {
  114. Toast.makeText(MainActivity.this, "哈哈!!", Toast.LENGTH_SHORT).show();
  115. }
  116. };
  117. /**-----------------------------------------------------------------------------*/
  118. }

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/知新_RL/article/detail/265019
推荐阅读
相关标签
  

闽ICP备14008679号