Android 通过接口传值

本文详细介绍了Android中如何通过接口进行数据传递,包括定义接口、发送数据和接收数据的步骤,以及提供了两个实际的案例,展示了在不同场景下接口传值的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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();
        }
    };
    /**-----------------------------------------------------------------------------*/

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值