【Android学习】按钮监听代码

1. 简介

Button组件是Android中常用的组件,Button常需要和View.OnClickListener配合使用。这里记录下Button配置监听的过程。

2. 代码分析 

2.1 Layout的XML代码

<Button
     android:id="@+id/btn"
     android:layout_width="match_parent"
     android:layout_height = "wrap_content"
     android:text = "hhh"
     android:textColor="@color/black"
     android:onClick="doClick"/>

可以看到Button中是可以放一个 android:onClick的属性,指定一个具体的click方法的,此种策略需要在Java代码中实现doClick方法,这样导致XML样式和Java逻辑形成了高耦合,这一般是程序开发过程中比较忌讳的,因此一般不这样来写,一般通过View.OnClickListener监听器实现Button的功能。

2.2 单个按钮时View.OnClickListener的示例代码

package com.example.learn;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.TextView;

public class MainActivity extends AppCompatActivity {
    private TextView tv;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        tv = findViewById(R.id.tv_main);
        //ViewGroup.LayoutParams layoutParams = tv.getLayoutParams();
        //layoutParams.width = 100;
        //tv.setLayoutParams(layoutParams);
        Button btn = findViewById(R.id.btn);
        btn.setOnClickListener(new BtnListener(tv));

    }
    static class BtnListener implements View.OnClickListener{
        private final TextView tv;
        public BtnListener(TextView tv) {
            this.tv = tv;
        }
        @Override
        public void onClick(View view) {
            String s =String.format("您点击了 %s",((Button)View).getText());
            tv.setText(s);
        }
    }
}

如以上代码,当单个按钮时可以用上述代码防止内存泄漏。这里需要指明,一般在OnCreate方法中需要将组件全部加载,这样在Activity的整个生命周期内,仅需要一次加载即可。不过此时有问题,如果有多个按钮时,需要多组btnListener的方法,这样显然影响开发效率。

2.3 多个按钮时View.OnClickListener的示例代码

package com.example.learn;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.TextView;

public class MainActivity extends AppCompatActivity implements View.OnClickListener{
    private TextView tv;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        tv = findViewById(R.id.tv_main);
        //ViewGroup.LayoutParams layoutParams = tv.getLayoutParams();
        //layoutParams.width = 100;
        //tv.setLayoutParams(layoutParams);
        Button btn = findViewById(R.id.btn);
        btn.setOnClickListener(this);
        Button btn1 = findViewById(R.id.btn1);
        btn1.setOnClickListener(this);

    }

    @Override
    public void onClick(View view) {
        if(view.getId()==R.id.btn){
            //执行btn对应的操作
        }else if(view.getId()==R.id.btn1){
            //执行btn1对应的操作
        }
    }

以上是简单的示例代码,仅供学习和参考使用。

一:使用匿名内部类的形式进行设置       1.首先需要得到id,即必须清楚button的id值。        2.使用setOnClickListener,如下图所示    二:在XML文件中定义OnClick属性,在java代码中对应方法。       在button下加上如下代码android:onClick=skip(skip即为方法对应的名字,然后在java代码中在定义具体的方法)                 实现的结果如下: --------------------- 作者:xd1501013 来源:CSDN 原文:https://blog.csdn.net/xd15010130025/article/details/77604329 版权声明:本文为博主原创文章,转载请附上博文链接! Button按钮四种监听(二) 继续上次的,我们接下来要学习另外两种方式,三:Activity实现onClickListener接口;四:其他类实现onClickListener接口。    三:Activity实现onClickListener接口      1.直接在Activity上添加          public class MainActivity extends Activity implements OnClickListener{ @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Button btn=(Button)findViewById(R.id.button1); btn.setOnClickListener(this); } 再创建方法      public void onClick(View v) { // TODO 自动生成的方法存根 Log.i("tag", "点击了button按钮"); } 实现效果    四:其他类实现onClickListener接口       1.创建一个其他类 class mylistener implements OnClickListener{ @Override public void onClick(View v) { // TODO 自动生成的方法存根 Log.i("tag", "点击了button按钮"); } }      二: protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Button btn=(Button)findViewById(R.id.button1); btn.setOnClickListener(new mylistener()); } 即可实现。 如果两个按钮怎么办????     用v.getId得到id值,然后用case来处理不同的情况.   --------------------- 作者:xd1501013 来源:CSDN 原文:https://blog.csdn.net/xd15010130025/article/details/77803332 版权声明:本文为博主原创文章,转载请附上博文链接!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值