View的点击事件
来源:互联网 发布:淘宝库存监控软件 编辑:程序博客网 时间:2024/06/06 03:40
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>
- View的点击事件
- View的点击事件
- View的点击事件
- view的点击事件分发
- 移动view的点击事件
- 组合View的点击事件
- View的多次点击事件
- Xml配置View的点击事件
- View、ViewGroup的点击事件处理过程
- View的点击事件分发机制
- Android View 点击事件的分发机制
- android...View的点击事件传递详解,
- ios捕捉移动view的点击事件
- Android代码练习:View的点击事件
- AS(三)view的点击事件解析
- 自定义view中控件的点击事件
- Android自定义view的点击事件
- 自定义View圆的点击事件实现
- win10没有睡眠功能的解决方案
- 香蕉牛奶饮
- 数据结构—Problem E: 链表的基本运算(线性表)
- 深拷贝与写实拷贝----string
- Adaboost算法的原理与推导
- View的点击事件
- 文件系统零散知识
- 2017年3月23日考试总结
- Win10中英文输入法无法切换解决办法
- 手机App: Web App、Hybrid App、 Native App
- 模块化js编写模板
- JAVA初窥:Thread线程基础
- 设计模式系列·Facade模式之MVC的烦恼
- 蛇形填空3-3