Android基础学习(一)——回调

Android基础学习(一)——回调

       先复习下回调的定义:

       回调函数就是一个通过函数指针调用的函数。如果你把函数的指针(地址)作为参数传递给另一个函数,当这个指针被用来调用其所指向的函数时,我们就说这是回调函数。回调函数不是由该函数的实现方直接调用,而是在特定的事件或条件发生时由另外的一方调用的,用于对该事件或条件进行响应。
(以上出自百度百科)

       在java中的回调,通俗点讲,就是通过一个接口C连接类A和类B,类B可以实例化一个接口C当做变量,传给类A,A执行接口C中已经被B填充完整了的方法。
       一般分三步分来实现一个回调的Demo:

       1. 写一个接口(这个Demo通过的是Button的点击事件来实现,接口命名为MyListener)。

package com.example.callbackdemo;

public interface MyListener {
    public void myClick();
}

       接口中未实现的myClick()方法是接口实例化时需要补充实现的。

       2. 继承Button控件(这个类也就是上文提到的类A)

package com.example.callbackdemo;

import android.content.Context;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.widget.Button;

public class MyButton extends Button {

    public MyButton(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
        // TODO Auto-generated constructor stub
    }

    public MyButton(Context context, AttributeSet attrs) {
        super(context, attrs);
        // TODO Auto-generated constructor stub
    }

    MyListener myListener;

    public MyButton(Context context) {
        super(context);
    }

    //在setOnClickListener方法中将MyListener当做变量传入此类中
    public void setOnClickListener(MyListener myListener) {
        this.myListener = myListener;
    }

    //复写onTouchEvent方法,点击这个Button时会走此方法
    @Override
    public boolean onTouchEvent(MotionEvent event) {
        myListener.myClick();//将MyListener需要实行的方法调用
        return super.onTouchEvent(event);
    }
}

       3. 在主界面调用Button点击事件(这个类也就是上文提到的类B)

package com.example.callbackdemo;

import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.Toast;

public class MainActivity extends Activity {

    private MyButton testCallback;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        testCallback = (MyButton) findViewById(R.id.bt_callback);
        //调用MyButton的setOnClickListener方法将实例化的接口传入
        testCallback.setOnClickListener(new MyListener() {

            @Override
            public void myClick() {
                //这里填补我们需要执行的方法,让MyButton调用
                Toast.makeText(getApplicationContext(), "测试回调", Toast.LENGTH_SHORT).show();
            }
        });
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        int id = item.getItemId();
        if (id == R.id.action_settings) {
            return true;
        }
        return super.onOptionsItemSelected(item);
    }

}

       以下是Layout文件代码

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="com.example.callbackdemo.MainActivity" >

    <com.example.callbackdemo.MyButton 
        android:id="@+id/bt_callback"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="测试回调"
        android:layout_centerInParent="true"
        />

</RelativeLayout>

       然后运行~~点击界面上的按钮,我们可以看到界面上显示我们的测试回调的Toast!
       以下是回调总结的思维导图(刚开始写博客,还不会在博客中添加工程文件):

梳理一下流程:
       我们在B类(MainActivity)中将接口C(MyListener)的实例化传入A类(MyButton)中,在实例化过程中将我们需要A类来执行的方法代码(也就是那个显示“测试回调”的Toast)填充进接口C,A类在触发调用接口C的方法(MyButton的点击事件)后,执行我们在B类中实例化填充进C的方法(Toast)。这就是回调,A执行了B中实例化接口时填充的方法。

       小弟是新手,刚开始学习Android写博客,表述不清的话大家多多包涵提提意见哈,严格来说,回调应该不属于Android的基础知识,而是属于java的,不过最近复习回调的时候是通过调用Android的控件来展示,所以顺便总结在Android的笔记中吧~

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值