实现监听器的四种方式

分别如下:

一. 创建成员内部类
二. 创建匿名内部类
三. Activity直接实现监听器接口
四. 通过XML布局文件定义onClick属性

一. 创建成员内部类
MainActivity.java

package com.example.android.ui_button;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity {
/*
为按钮添加监听器
第一步:XML布局文件中添加BUtton控件,并设置id
第二步:在java代码中(需要显示该控件的Activity中),通过setContentView,
装载Button所在的XML布局。
第三步:通过BUtton的id在Activity中获取到Button的对象
第四步:为button按钮添加监听事件
       a.创建内部类并实现OnClickListener接口
       b.重写onClick()方法(当按钮被点击后,想要做的一些操作)
       c.生成内部类对象
 */
    private Button button01;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        //第二步
        setContentView(R.layout.activity_main);
        //第三步
        button01 = findViewById(R.id.btn01);
        //生成监听器的对象
        MyButtonListener myButtonListener = new MyButtonListener();
        //为按钮添加监听器
        button01.setOnClickListener(myButtonListener);
    }

    class MyButtonListener implements View.OnClickListener{
        @Override
        public void onClick(View view) {
            //该方法将在绑定的按钮别点击时调用,v对象为绑定的控件
            //吐司的使用方法:1.当前界面对象(上下文环境),2.显示内容,3.吐司显示时长
            Toast.makeText(MainActivity.this,"按钮被点击啦!!",Toast.LENGTH_SHORT).show();
        }
    }
}

activity_main.xml


<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <Button
        android:id="@+id/btn01"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Button"
        android:textColor="@color/colorAccent"
        android:background="@color/colorPrimaryDark"/>

LinearLayout>

效果:
实现监听器的四种方式_第1张图片

二. 创建匿名内部类
SecondActivity.java

package com.example.android.ui_button;

import android.app.Activity;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;

/**
 * Created by JZHHZ on 2018/3/23.
 * 第一步:获取Button对象
 * 第二步:直接调用button的setOnClickListener方法
 *        a.在方法中,传入new OnClickListener(){
 *            onClick(){
 *
 *            }
 *        }
 * 匿名内部类和内部类形式,这两种形式在开发中最常用
 */

public class SecondActivity extends Activity {
    private Button btn;
    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_second);

        btn = findViewById(R.id.btn01);
        btn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                //当按钮点击时调用
                Toast.makeText(SecondActivity.this,"按钮被点击了",Toast.LENGTH_LONG).show();
            }
        });
    }
}

三. Activity直接实现监听器接口
ThirdActivity.java

package com.example.android.ui_button;

import android.app.Activity;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;

/**
 * Created by JZHHZ on 2018/3/23.
 */

public class ThirdActivity extends Activity implements View.OnClickListener{
    private Button btn;

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        btn = findViewById(R.id.btn01);
        btn.setOnClickListener(this);
    }

    @Override
    public void onClick(View view) {
        //当按钮被点击时调用
        Toast.makeText(this, "按钮被点击了啊", Toast.LENGTH_SHORT).show();
    }
}

四. 通过XML布局文件定义onClick属性
Fourth.java

package com.example.android.ui_button;

import android.app.Activity;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;

/**
 * Created by JZHHZ on 2018/3/23.
 * 第一步:xml布局文件中,为Button添加onClick属性
 * 第二步:在对应的Activity中,创建一个以onClick属性值为名字的方法
 *        a.修饰符为public
 *        b.返回值为void
 *        c.传入参数为View类型
 */

public class Fourth extends Activity {
    private Button btn;

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        btn = findViewById(R.id.btn01);

    }

    public void myButtonClick(View view){
        Toast.makeText(Fourth.this, "按钮被点击了呀", Toast.LENGTH_SHORT).show();
    }
}

xml布局中Button:

    

为多个按钮添加监听器:
FifthActivity.java

public class ThirdActivity extends Activity{
    /**
     * 通过创建内部类为多个按钮添加监听器
     * 创建内部类实现OnClickListener接口
     * onClick方法中,通过Switch(R.id.xxx)方式区别当前被点击的按钮是哪个
     * 之后再对相应的按钮做不通的处理
     */
    private Button btn01,btn02;

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        btn01 = findViewById(R.id.btn01);
        btn02 = findViewById(R.id.btn02);
        ButtonListener buttonListener= new ButtonListener();
        btn01.setOnClickListener(buttonListener);
        btn02.setOnClickListener(buttonListener);
    }

    class ButtonListener implements View.OnClickListener{
        @Override
        public void onClick(View view) {
            switch (view.getId()){
                case R.id.btn01:
                    Toast.makeText(FifthActivity.this, "按钮01被点击了呀", Toast.LENGTH_SHORT).show();
                    break;
                case R.id.btn02:
                    Toast.makeText(FifthActivity.this, "按钮02被点击了呀", Toast.LENGTH_SHORT).show();
                    break;
            }
        }
    }
}

xml布局文件,两个Button:

    

你可能感兴趣的:(Android)