View的点击事件

1、Onclick属性指定

public class FirstActivity extends AppCompatActivity
{
    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_first);
    }

    public void welcome(View view)
    {
        Toast.makeText(this,"Welcome",Toast.LENGTH_LONG).show();
    }
}

除了上诉的中按钮设置onClick属性指定点击方法以外,还有三种方式用于设置View的点击事件,这三种方式都用到了setOnclickListener接口,只不过是不同形式。

OnClickListener是监听View点击事件的接口,接口中定义控件被点击时的回调方法onClick()。View需要在setOnclickListener(OnClickListener listener)方法的参数中传入OnClickListener 接口监听View的点击事件。

下面针对这三种形式以及OnClickListener 接口的使用进行讲解。
2、创建匿部类:
创建一个内部类实现OnClickListener 接口并重写onClick()方法,在方法中写入点击事件的逻辑。

内部类写完之后需要为按钮设置setOnclickListener(OnClickListener listener)属性,在参数中传入之前创建好的内部类对象即可,这样当点击按钮就会自动触发内部类中的onClick()方法调用事件逻辑。

这里比较重要的一点,要为按钮设置点击事件前要先获取到控件的引用,需要在布局文件中为按钮设置id的属性,在代码中使用findViewById(R.id)方法得到该控件的View对象,最后通过强制类型转换得到该控件,具体代码如下:

为控件设置id属性:

 <Button
        android:id="@+id/btnClick" 
        ......
 />

得到控件引用,创建内部类实现OnClickListener 接口:

public class FirstActivity extends AppCompatActivity
{
    private Button btnClick;
    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_first);
        btnClick=(Button)findViewById(R.id.btnClick);
        //传入实现了OnClickListener 接口的类的对象
        btnClick.setOnClickListener(new ButtonHandler());
    }

    class ButtonHandler implements  View.OnClickListener
    {
        @Override
        public void onClick(View v)
        {
            Toast.makeText(FirstActivity.this,"Welcome",Toast.LENGTH_LONG).show();
        }
    }
}

使用这种点击事件的好处是,当按钮较多时可以再onClick(View v)方法中使用swtich语句case属性设置各自不同的点击事件luoji。

3、主类中实现OnClickListener 接口:

除了创建内部类实现OnClickListener 接口之外,还可以在主类中实现该接口,然后重写onClick()方法,并通过switch语句判断是哪个按钮被点击,然后执行相应的操作,具体代码如下:

public class FirstActivity extends AppCompatActivity implements View.OnClickListener
{
    private Button btnClick;
    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_first);

        btnClick=(Button)findViewById(R.id.btnClick);
        //按钮绑定接口
        btnClick.setOnClickListener(this);
    }
    //在重载的方法中实现点击设置
    @Override
    public void onClick(View v)
    {    Toast.makeText(FirstActivity.this,"Welcome",Toast.LENGTH_LONG).show();
    }
}

需要注意的是,btnClick.setOnClickListener(this);方法中接受了一个参数this,这个this代表的是该Activity的引用。由于Activity实现了OnClickListener接口,所以在这里this代表了OnClickListener的引用,在方法中传入this就代表该控件绑定了点击事件的接口。

4、匿名内部类

当按钮较少或者只有一个按钮时,就不需要在单独创建一个类实现OnClickListener接口,可以直接创建OnClickListener的匿名内部类传入按钮的setOnClickListener()参数中,具体代码如下:

public class FirstActivity extends AppCompatActivity
{
    private Button btnClick;
    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_first);

        btnClick=(Button)findViewById(R.id.btnClick);
        btnClick.setOnClickListener(new View.OnClickListener()
        {
            @Override
            public void onClick(View v)
            {
                Toast.makeText(FirstActivity.this,"Welcome",Toast.LENGTH_LONG).show();

            }
        });
    }
}

注意:
在实现OnClickListener接口时该接口在Android的两个包下面都有,分别是android.view.View和android.content.DialogInteface。要为按钮设置点击事件要导入android.view.View包。

例子:
这里写图片描述

FirstActivity.java:

package cn.edu.bzu.activitydemo;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;

//(1)Onclick属性指定
public class FirstActivity extends AppCompatActivity
{
    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_first);
    }

    public void welcome(View view)
    {
        Toast.makeText(this,"Welcome",Toast.LENGTH_LONG).show();
    }
}
//(2)创建内部类
public class FirstActivity extends AppCompatActivity
{
    private Button btnClick;
    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_first);

        btnClick=(Button)findViewById(R.id.btnClick);
        btnClick.setOnClickListener(new ButtonHandler());
    }

    class ButtonHandler implements  View.OnClickListener
    {
        @Override
        public void onClick(View v)
        {
            Toast.makeText(FirstActivity.this,"Welcome",Toast.LENGTH_LONG).show();
        }
    }
}
//(3)主类中实现OnClickLister()借口
public class FirstActivity extends AppCompatActivity implements View.OnClickListener
{
    private Button btnClick;
    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_first);

        btnClick=(Button)findViewById(R.id.btnClick);
        btnClick.setOnClickListener(this);
    }

    @Override
    public void onClick(View v)
    {
        Toast.makeText(FirstActivity.this,"Welcome",Toast.LENGTH_LONG).show();

    }
}
//(4)匿名内部类
public class FirstActivity extends AppCompatActivity
{
    private Button btnClick;
    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_first);

        btnClick=(Button)findViewById(R.id.btnClick);
        btnClick.setOnClickListener(new View.OnClickListener()
        {
            @Override
            public void onClick(View v)
            {
                Toast.makeText(FirstActivity.this,"Welcome",Toast.LENGTH_LONG).show();

            }
        });
    }
}

注意:(1)(2)(3)(4)任意一种即可。
AndroidMainfest.xml:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="cn.edu.bzu.activitydemo">
    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity android:name=".FirstActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN"></action>
                <category android:name="android.intent.category.LAUNCHER"></category>
            </intent-filter>
        </activity>
    </application>
</manifest>

Activity_first.xml:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="match_parent"
    android:layout_height="match_parent">

    <Button
        android:text="click"
        android:drawableLeft="@mipmap/ic_launcher"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:onClick="welcome"
        android:id="@+id/btnClick" />
</LinearLayout>

这里写图片描述

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值