ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

安卓基础学习——点击事件监听的四种写法

2021-05-25 20:30:12  阅读:197  来源: 互联网

标签:OnClickListener 安卓 Button 点击 intent 按钮 btn 写法 监听


  在学习安卓开发的过程中,按钮是最常用的UI组件,可以通过点击按钮实现不同的动作,要想实现按钮的点击功能,需要对按钮设置监听器,其中一些概念需要重点理解,在此给出详细介绍:

一、UI事件的理解

  1. 事件:当我们点击UI界面时,系统会自动创建相应的事件对象,事件是系统自动创建的;
  2. 事件源:产生事件的组件,例如当我们按下按钮时,按钮就是事件源;
  3. 监听器:系统通过监听器实现对事件的拦截处理。

在这里插入图片描述
在这里插入图片描述

二、按钮点击事件的实现步骤

  通过上面的理解可以知道,当我们按下按钮时,系统会自动创建一个点击事件,并调用按钮设置好的监听器中的onclick()方法。因此我们要实现点击按钮时产生相应动作,需要对其设置监听器。实现按钮点击动作的步骤如下:

  1. 在xml文件中给出bButton控件;
  2. 在Activity中通过findViewById进行实例化;
  3. 通过按钮对象的setOnClickListener(OnClickListener l)方法设置监听器
  4. 在监听器对象中的onClick方法中设置点击动作。

  其中步骤三种setOnClickListener(OnClickListener l)方法需要传入一个OnClickListener对象,然而OnClickListener是View中的一个接口,以下是其源码。要想得到其对象,有两种方式:

 (1)通过匿名内部类对象实现;
 (2)将该Activity类实现OnClickListener接口,将this作为其对象;
  相应的可以得到三种点击事件的写法。(匿名内部类对象可以直接在调用setOnClickListener方法时进行new,也可以将其作为成员变量,在传入setOnClickListener方法)

public interface OnClickListener {
        /**
         * Called when a view has been clicked.
         *
         * @param v The view that was clicked.
         */
        void onClick(View v);
    }

三、按钮点击事件的写法

  1. 通过setOnClickListener(new View.OnClickListener )实现,一般用于只有一个按钮需要设置点击事件的情况,实现代码如下:
public class MainActivity extends Activity {
    private Button btn_setonclicklistener;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main); //加载界面
        
        btn_setonclicklistener = (Button) findViewById(R.id.btn_setonclicklistener);//实例化按钮对象
        
        //通过匿名内部类设置监听器
        btn_setonclicklistener.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent(MainActivity.this,SecondActivity.class);
                startActivity(intent);
            }
        });
    }
}
  1. 通过匿名内部类对象作为成员变量实现,该方法其实就是将匿名内部类进行了抽取,在多次设置监听器时减少了代码量,相应的实现代码如下:
public class ThirdActivity extends AppCompatActivity {

    private Button btn_setonclicklistener1;
    private Button btn_setonclicklistener2;
    private Intent intent;
    //创建OnClickListener接口的匿名内部类对象
    private View.OnClickListener listener = new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            switch (v.getId()){
                case R.id.btn_setonclicklistener1:
                    Toast.makeText(ThirdActivity.this,"第一个按钮被点击",Toast.LENGTH_SHORT).show();
                    startActivity(intent);
                    break;
                case R.id.btn_setonclicklistener2:
                    Toast.makeText(ThirdActivity.this,"第二个按钮被点击",Toast.LENGTH_SHORT).show();
                    startActivity(intent);
                    break;
            }
        }
    };


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_third);
        btn_setonclicklistener1 = (Button) findViewById(R.id.btn_setonclicklistener1);
        btn_setonclicklistener2 = (Button) findViewById(R.id.btn_setonclicklistener2);
        btn_setonclicklistener1.setOnClickListener(listener);
        btn_setonclicklistener2.setOnClickListener(listener);
        intent = new Intent(this, FourthActivity.class);

    }
}```

 3. 通过this实现,这种方法需要本身的Activity实现OnClickListener接口,一般用于多个按钮需要设置监听器,相应的实现代码如下:

```java
public class SecondActivity extends AppCompatActivity implements View.OnClickListener{

    private Button btn_setonclicklistener1;
    private Button btn_setonclicklistener2;
    private Intent intent;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_second);
        btn_setonclicklistener1 = (Button) findViewById(R.id.btn_setonclicklistener1);
        btn_setonclicklistener2 = (Button) findViewById(R.id.btn_setonclicklistener2);
        btn_setonclicklistener1.setOnClickListener(this);
        btn_setonclicklistener2.setOnClickListener(this);
        intent = new Intent(this, ThirdActivity.class);
    }

    @Override
    public void onClick(View v) {  //v就是发生事件的视图对象(被点击的按钮)
        switch (v.getId()){
            case R.id.btn_setonclicklistener1:
            
                //这里的this就是SecondActivity的对象本身,因此不需要使用SecondActivity.this
                Toast.makeText(this,"第一个按钮被点击",Toast.LENGTH_SHORT).show();
                startActivity(intent);
                break;
            case R.id.btn_setonclicklistener2:
                Toast.makeText(this,"第二个按钮被点击",Toast.LENGTH_SHORT).show();
                startActivity(intent);
                break;
        }

    }
}
  1. 通过Button接口的onClick属性实现,该方法只需要在xml文件添加Button接onClick属性,并在Activity中给下相应的方法即可,是最简单的实现,相应的实现代码如下:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:orientation="vertical"
    android:gravity="center_horizontal"
    android:layout_height="match_parent"
    tools:context="com.example.hp.setonclicklistener.SecondActivity">
    <Button
        android:id="@+id/btn_setonclicklistener2"
        android:layout_height="wrap_content"
        android:layout_width="wrap_content"
        android:textSize="20sp"
        android:padding="10dp"
        android:layout_marginTop="40sp"
        android:text="通过按钮属性设置点击事件"
        android:onClick="startMainActivity"
        />

</LinearLayout>
public class FourthActivity extends AppCompatActivity {

    private Intent intent;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_fourth);
        intent = new Intent(this, MainActivity.class);
    }
    //直接给出Onclick属性对应的方法即可
    public void startMainActivity(View v){
        startActivity(intent);
    }
}

标签:OnClickListener,安卓,Button,点击,intent,按钮,btn,写法,监听
来源: https://blog.csdn.net/weixin_45123763/article/details/117262250

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有