• 安卓按钮添加监听的三种方法


    在安卓开发中,对按钮添加监听,是每一个app都需要用到的。通常我们会用三种办法来对按钮进行监听。下面我们哎说说着三种。我个人是比较喜欢匿名内部类的方法的。

    第一种,匿名内部类

    匿名内部类一般通过以下代码完成,顾名思义,通过传入匿名内部类来实现监听并写出对应的事件处理

    btButton.setOnClickListener(new OnClickListener() {
    
    @SuppressLint("ShowToast") @Override
    public void onClick(View v) {
    // TODO Auto-generated method stub
    Toast.makeText(MainActivity.this,tipsString,Toast.LENGTH_SHORT ).show();
    
    }
    
    });

    第二种,通过当前类实现OnClickListener接口并在其必须实现的onClick方法中添加事件

    public class MainActivity extends Activity implements OnClickListener
    
    ========================================
    btButton2.setOnClickListener(this);
    
    @Override
    
    public void onClick(View v) {
    
    // TODO Auto-generated method stub
    
    Toast.makeText(MainActivity.this, tipsString2, Toast.LENGTH_SHORT).show();
    
    }

    第三种,在布局文件中添加 android:onClick属性来实现。这种和javascript的onclick写法是一样的,属性后面的值是方法名称。定义好后,需要在onCreate()方法中写出该方法,并且该方法必须用View 作为参数传入。比如你定义了 android:onClick="sing",那么你就必须在当前类中写上 sing(view v)方法。

    <Button
    android:id="@+id/bt3"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:onClick="@string/method"
    android:text="@string/bt3" />

    下面我们看看我写的Demo,

    先看运行截图吧

    2ff419bd-642f-45c9-9a6f-4e6fed72f64c

    然后是源代码

    首先是布局文件activity_main.xml

    <LinearLayout 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:orientation="vertical"
        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.buttononclik.MainActivity" >
    
        <Button
            android:id="@+id/bt1"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="@string/bt1" />
    
        <Button
            android:id="@+id/bt2"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="@string/bt2" />
    
        <!--
             注意,下面两个按钮多了android:onClick属性。这个属性的作用就是当被点击
                            时候就调用设置的方法,"@string/method" 方法名可以随便起,这里我们引用
             "@string/method",值为onclickMethod。这个一点和javascript很像。也就
                           是说,其实这里我们是不通过findViewById()来取得按钮的。所以id是可以不用
                            设置的。那么下面我们设置id是因为我用了两个按钮,并着俩个按钮的
             android:onClick属性都设置为onclickMethod,所以如果要对相同方法名,我们
                          需要id作为判断,如果方法名设置为不一样,我们完全可以不用设置id。
                         这个方法需要在当前类中写上对于的方法来处理监听事件。 -->
    
        <Button
            android:id="@+id/bt3"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:onClick="@string/method"
            android:text="@string/bt3" />
    
        <Button
            android:id="@+id/bt4"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:onClick="@string/method"
            android:text="@string/bt4" />
    
    </LinearLayout>

    然后是java文件 MainActivity.java

    package com.example.buttononclik;
    
    import android.annotation.SuppressLint;
    import android.app.Activity;
    import android.os.Bundle;
    import android.view.View;
    import android.view.View.OnClickListener;
    import android.widget.Button;
    import android.widget.Toast;
    
    
    public class MainActivity extends Activity implements OnClickListener{
        
        //定义要用到的属性
        private Button btButton;
        private Button btButton2;
        private String tipsString;
        private String tipsString2;
        private String tipsString3;
        private String tipsString4;
        
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            //加载布局文件
            setContentView(R.layout.activity_main);
            
            btButton = (Button) findViewById(R.id.bt1);
            tipsString = this.getString(R.string.tips);
            tipsString2 = this.getString(R.string.tips2);
            tipsString3 = this.getString(R.string.tips3);
            tipsString4 = this.getString(R.string.tips4);
           
            
            
            btButton2 = (Button) findViewById(R.id.bt2);
            /*当前类实现了OnClickListener接口,
                              所以我们可以传入当前类对象this作为参数,并在下面方法写事件*/
            btButton2.setOnClickListener(this);
            
            //通过setOnClickListener方法并传入匿名内部类OnClickListener来实现监听
            btButton.setOnClickListener(new OnClickListener() {
                
                @SuppressLint("ShowToast") @Override
                public void onClick(View v) {
                    // TODO Auto-generated method stub
                    Toast.makeText(MainActivity.this,tipsString,Toast.LENGTH_SHORT ).show();
                }
            });
        }
        
        
    
        //这个是继承了OnClickListener方法所要实现的方法,监听事件可以在这个方法写
        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub
            Toast.makeText(MainActivity.this, tipsString2, Toast.LENGTH_SHORT).show();
        }
        
        public void onclickMethod(View v){
            int id = v.getId();
            switch (id) {
            case R.id.bt3:
                Toast.makeText(MainActivity.this,tipsString3 , Toast.LENGTH_SHORT).show();
                break;
            case R.id.bt4:
                Toast.makeText(MainActivity.this,tipsString4 , Toast.LENGTH_SHORT).show();
                break;
    
            default:
                break;
            }
        }
    }

    然后是字符串文件strings.xml

    <?xml version="1.0" encoding="utf-8"?>
    <resources>
    
        <string name="app_name">buttonOnclik</string>
        <string name="hello_world">Hello world!</string>
        <string name="action_settings">Settings</string>
        <string name="bt1">内部类实现监听</string>
        <string name="tips">通过匿名内部类实现监听</string>
        <string name="bt2">通过实现OnCllickListener接口实现监听</string>
        <string name="tips2">通过实现OnClickListener接口添加监听</string>
        <string name="method">onclickMethod</string>
        <string name="bt3">通过设置Onclick属性监听</string>
        <string name="bt4">作用是为了用id区分bt3</string>
        <string name="tips3">如果不是有要区别两个相同Onclick属性的按钮,id可以不用设置</string>
        <string name="tips4">第四个按钮被点击了</string>
    
    </resources>
  • 相关阅读:
    Django admin 注册自己的路由
    django admin字段设置大全
    Python 装饰器原理
    css hack中遇到的一些问题
    阿里巴巴iconfont的正确使用方法
    css中position(absolute)与margin同时使用的情况
    关于IE浏览器不支持border-radius,box-shadow,text-shadow的解决方法
    大唐项目的总结
    js中的词法作用域
    easyui中datagrid自带loading效果
  • 原文地址:https://www.cnblogs.com/linfenghp/p/5373754.html
Copyright © 2020-2023  润新知