Android 通过接口传值

    xiaoxiao2021-03-25  96

    Android 通过接口传值 接口传值简单了说,就是在需要传值的那方定义接口,在接收数据的那方实现接口,数据就在需要实现的那个方法里,千万记住传值方的Listener一定是接收数据方的Listener。 第一步:定义接口类: public interface Listener {     void send(String s); } 第二步:传递类发送数据: public class Data {     public Listener mListener;//接口     public Data(Listener mListener) {         this.mListener = mListener;     }     public void sends(){         mListener.send("越努力越成功,越聚贵人!");//开始发送数据     } } 第三步:接受类接收数据: public class MainActivity extends Activity implements Listener{     @Override     protected void onCreate(Bundle savedInstanceState) {         super.onCreate(savedInstanceState);         setContentView(R.layout.activity_main);         Data data = new Data(this);//实例化data类         data.sends();//启动发送     }     @Override     public void send(String s) {         Log.e("tag: ",s);     } } 案例(一) public interface CallBack {     void doSomeThing(String string); } public class CallBackUtils {     private static CallBack mCallBack;     //方式1     public static void setCallBack(CallBack callBack) {         mCallBack = callBack;     }     //方式2 直接把CallBack 当参数传入,     // 在需要使用的时候直接传入,然后调用接口方法就可以了。     // 避免了,忘记在调用的类中setCallBack(set值)     public static void doCallBackMethod(CallBack callBack){         String info = "这里CallBackUtils即将发送的数据。";         callBack.doSomeThing(info);     } } public class SimpleCallBackTest extends Activity implements CallBack {     @Override     protected void onCreate(Bundle savedInstanceState) {         super.onCreate(savedInstanceState);         //CallBackUtils.setCallBack(this);         //调用CallBackUtils的doCallBackMethod()方法。         new Handler().postDelayed(new Runnable() {             @Override             public void run() {                 /**                  * 方式一 解释                  *  调用doCallBackMethod方法,目的是将SimpleCallBackTest注册到接口那里,                  *  使接口知道,需要调用的是哪个类中的,实现该接口的方法。                  *  调用CallBackUtils.doCallBackMethod()即调用了CallBack.doSomeThing(info)方法;                  *  通过接口就可以把数据传输到这个类里的doSomeThing()方法里。                  */                 //CallBackUtils.doCallBackMethod();                 /**                  * 方式二 解释 (推荐使用)                  *  SimpleCallBackTest.this 实现了CallBack接口                  *  用多态理解,就是SimpleCallBackTest 是CallBack的具体实现子类。                  *  所以这里传入SimpleCallBackTest.this                  *  详见CallBackUtils类                  */                 CallBackUtils.doCallBackMethod(SimpleCallBackTest.this);             }         }, 1000);     }     @Override     public void doSomeThing(String string) {         Log.e("========", "拿到CallBackUtils的传递过来的数据=====" + string);     } } 案例(二) public class DownloadImageUtil {     public static void StartDownLoad(final ImageStateInterface imageStateInterface,                                      final Context context) {         //该imageStateInterface使其得知,是从哪里注册过来的,然后根据其来源调用其实现的接口方法。         //如下,此时调用的就是MainActivity.this中实现的onImageStart方法。         imageStateInterface.onImageStart();         new Thread(new Runnable() {             @Override             public 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();     } } public interface ImageStateInterface {     void onImageStart();     void onImageSuccess(Bitmap bitmap);     void onImageFailed();     void OnEnd(); } public class MainActivity extends Activity implements ImageStateInterface {     private Button button;     private TextView mTextView;     @Override     protected 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() {             @Override             public void onClick(View v) {                 DownloadImageUtil downloadImageUtil = new DownloadImageUtil();                 /**                  调用StartDownLoad方法,目的是将MainActivity注册到接口那里,                  使接口知道,需要调用的是哪个类中的实现该接口的方法。                  */                 downloadImageUtil.StartDownLoad(MainActivity.this,                         getApplicationContext());             }         });     }     @Override     public void onImageStart() {         Log.d("lincoln", "onImageStart");         button.setText("onImageStart");         mTextView.setText("onImageStart");     }     @Override     public void onImageSuccess(final Bitmap bitmap) {         Log.d("lincoln", "onImageSuccess");         runOnUiThread(new Runnable() {             @SuppressLint("NewApi")             @Override             public void run() {                 button.setText("onImageSuccess");                 mTextView.setText("onImageSuccess");                 button.setBackground(new BitmapDrawable(bitmap));             }         });     }     @Override     public void onImageFailed() {     }     @Override     public void OnEnd() {         Toast.makeText(MainActivity.this, "完成啦!!", Toast.LENGTH_SHORT).show();     }     /**---------------------实现方式一 结束------------------------*/     /**      * --------------------------实现方式二-----------------------------      */     private void onLincolnTwo() {         button = (Button) findViewById(R.id.button);         button.setOnClickListener(new View.OnClickListener() {             @Override             public void onClick(View v) {                 DownloadImageUtil.StartDownLoad(imageInterface,                         MainActivity.this);             }         });     }     ImageStateInterface imageInterface = new ImageStateInterface() {         @Override         public void onImageStart() {             Log.d("lincoln", "onImageStart");             button.setText("onImageStart");         }         @Override         public void onImageSuccess(final Bitmap bitmap) {             Log.d("lincoln", "onImageSuccess");             runOnUiThread(new Runnable() {                 @SuppressLint("NewApi")                 @Override                 public void run() {                     button.setText("onImageSuccess");                     button.setBackground(new BitmapDrawable(bitmap));                 }             });         }         @Override         public void onImageFailed() {         }         @Override         public void OnEnd() {             Toast.makeText(MainActivity.this, "哈哈!!", Toast.LENGTH_SHORT).show();         }     };     /**-----------------------------------------------------------------------------*/ }
    转载请注明原文地址: https://ju.6miu.com/read-14321.html

    最新回复(0)