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

来源:互联网 发布:国际通用聊天软件 编辑:程序博客网 时间:2024/05/21 10:46
第一种,匿名内部类




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




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" />
首先是布局文件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>第一种,匿名内部类


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


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" />


首先是布局文件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
0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 小孩子上幼儿园爱打人怎么办 小孩被别人打了怎么办 1岁幼儿爱打人怎么办 作为幼小朋友打人老师怎么办 2岁半小朋友喜欢打人怎么办 2岁宝宝脾气大怎么办 4月小孩爱动怎么办 一岁宝宝老打人怎么办 1岁宝宝爱打人怎么办 3岁宝宝喜欢抓人怎么办 宝宝喜欢打人怎么办2岁 1岁宝宝动手打人怎么办 孩子总打人总哭怎么办 小孩出现夜惊家人怎么办 小孩不原跟家人沟通怎么办 孩子字写得难看怎么办 孩子上一年级不认识字怎么办 二年级孩子语文差怎么办 孩子二年级语文成绩差怎么办 孩子小学二年级语文差怎么办 二年级孩子语文理解能力差怎么办 深圳租房被坑了怎么办 小鸣单车押金退不了怎么办 联想台式一体机忘记密码怎么办 ps直线工具变成箭头了怎么办 笔记本图形处理速度慢怎么办 微信语音发不出去怎么办 ps里的图层锁定怎么办 ps图层丢失了怎么办 PS标题画面太小怎么办 轮胎蹭掉一块皮怎么办 吃香蕉吃的胃难受怎么办 qq糖卡在喉咙里怎么办 头发上粘到了qq糖怎么办 老房子土墙掉土怎么办 速写画的太慢怎么办 艺术生文化课没过线怎么办 5岁儿童坐飞机忘带证件怎么办 儿童坐飞机没带证件怎么办 儿童坐飞机没带户口本怎么办 儿童坐飞机没有带户口本怎么办