Android按钮点击事件

2020-03-04 23:02:18

Button控件点击方式比较多,本文简单介绍以下六种:

①布局中指定onClick属性

②使用匿名内部类

③在当前Activity中实现OnClickListener接口

④创建内部类的形式

⑤创建外部类的形式

⑥Lambda表达式

 

布局文件【button1.xml】

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
<!--按钮点击事件的实现-->
    <Button
        android:id="@+id/button"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:onClick="click"
        android:text="按钮1" />

    <Button
        android:id="@+id/button2"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_below="@id/button"
        android:text="按钮2" />
</RelativeLayout>

 

①②MainActivity.java文件【方式一、方式二】

public class MainActivity extends AppCompatActivity {
        //按钮点击事件【方法1和方法2的验证】
        //按钮1是在布局中指定onClick属性的方式实现点击事件
        //按钮2是通过匿名内部类的方式来实现点击事件

    private Button myBtn_one;
    private Button myBtn_two;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.button1);

        //通过findViewById()初始化控件
        myBtn_one = (Button) findViewById(R.id.button);
        myBtn_two = (Button) findViewById(R.id.button2);
        //方法二:匿名内部类方法实现按钮2的点击事件
        myBtn_two.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                myBtn_two.setText("按钮2已被点击");
            }
        });
    }
        //方法一:通过实现onClick()方法,实现按钮1的点击事件
        public void click(View v){
            myBtn_one.setText("按钮1已被点击");
        }
}

 

MainActivity.java文件【方式三】

public class MainActivity extends AppCompatActivity implements View.OnClickListener{    //实现OnClickListener接口
    //按钮点击事件【方法3的验证】
    //方法三:在当前Activity中实现OnClickListener接口
    private Button myBtn_one;
    private Button myBtn_two;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.button1);

        //通过findViewById()初始化控件
        myBtn_one = (Button) findViewById(R.id.button);
        myBtn_two = (Button) findViewById(R.id.button2);
        //this代表OnClickListener的引用
        myBtn_one.setOnClickListener(this);
        myBtn_two.setOnClickListener(this);
    }
    //父类View.OnClickListener【接口】是public,子类实现接口必须是public,权限不能低于父类
    @Override
    public void onClick(View v) {
        switch (v.getId()) {
            case R.id.button:
                myBtn_one.setText("按钮1已被点击");
                break;
            case R.id.button2:
                myBtn_two.setText("按钮2已被点击");
                break;
        }
    }
}

 

④MainActivity.java文件【方式四】

public class MainActivity extends AppCompatActivity{
    //按钮点击事件【方法4的验证】
    //方法四:创建内部类
    private Button myBtn_one;
    private Button myBtn_two;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.button1);

        //通过findViewById()初始化控件
        myBtn_one = (Button) findViewById(R.id.button);
        myBtn_two = (Button) findViewById(R.id.button2);
        //引用实现OnClickListener接口内部类对象
        myBtn_one.setOnClickListener(new Mybutton());
        myBtn_two.setOnClickListener(new Mybutton());
    }

    public class Mybutton implements View.OnClickListener{  //实现OnClickListener接口
        @Override
        public void onClick(View v) {
            switch (v.getId()) {
                case R.id.button:
                    myBtn_one.setText("按钮1已被点击");
                    break;
                case R.id.button2:
                    myBtn_two.setText("按钮2已被点击");
                    break;
            }
        }
    }

}

 

 

⑤MainActivity.java文件【方式五】

public class MainActivity extends AppCompatActivity{
    //按钮点击事件【方法5的验证】
    //方法五:创建外部类
    private Button myBtn_one;
    private Button myBtn_two;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.button1);

        //通过findViewById()初始化控件
        myBtn_one = (Button) findViewById(R.id.button);
        myBtn_two = (Button) findViewById(R.id.button2);
        //引用实现OnClickListener接口外部类对象
        myBtn_one.setOnClickListener(new Mybutton(){

            @Override
            public void onClick(View v) {
                super.onClick(v);
                myBtn_one.setText("按钮1已被点击");
            }
        });
        myBtn_two.setOnClickListener(new Mybutton(){
            @Override
            public void onClick(View v) {
                super.onClick(v);
                myBtn_two.setText("按钮2已被点击");
            }
        });
    }
}
class Mybutton implements View.OnClickListener{  //实现OnClickListener接口

    @Override
    public void onClick(View v) {
        }
}

⑥MainActivity.java文件【方式六】

在使用Lambda表达式之前需要进行配置【两步】:

第一步:在“Project Structure”中加入“JDK Location”【如下图所示】

如果JDK选择的不是JDK8可能出现“请选择一个有效的 jdk 8目录(Please choose a valid JDK 8 directory”的信息,不行的话就去官网下JDK8。

Android按钮点击事件

 

 第二步:设置“sourceCompatibility”和“targetCompatibility”为1.8

Android按钮点击事件

 

public class MainActivity extends AppCompatActivity{
    //按钮点击事件【方法6的验证】
    //方法六:Lambda表达式
    //① 修改build.gradle文件,【enable jack已经过时,不可设置】,设置sourceCompatibility,targetCompatibility为jdk1.8
    private Button myBtn_one;
    private Button myBtn_two;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.button1);

        //通过findViewById()初始化控件
        myBtn_one = (Button) findViewById(R.id.button);
        myBtn_two = (Button) findViewById(R.id.button2);
        myBtn_one.setOnClickListener(view->myBtn_one.setText("按钮1已被点击"));
        myBtn_two.setOnClickListener(view->myBtn_two.setText("按钮2已被点击"));
    }
}

 

运行效果:

Android按钮点击事件

 

 

2020-03-04 23:57:50

Android按钮点击事件

上一篇:强烈推荐一款CSS导航菜单


下一篇:使用APT实现Android中View的注入