Day5、五种不同的事件监听器
来源:互联网 发布:剑灵女刺客捏脸数据 编辑:程序博客网 时间:2024/05/12 06:28
所有用户界面是用和用户交互的,所以点击事件非常重要,而实现的方法则是通过添加事件监听器,来编写具体的逻辑代码实现,所以从简单的按钮开始,学懂和学通添加时间监听器的方法对应开发人员来说,非常重要
一、采用匿名内部类的方法
1.incident.xml代码,很简单。
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <Button android:id="@+id/btn_show" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/btn_show" android:textSize="14sp" android:textColor="#00f" android:layout_marginTop="10dp"/></LinearLayout>
2.MainActivity.java代码。
package com.zero.buttonincident;import android.os.Bundle;import android.support.v7.app.ActionBarActivity;import android.util.Log;import android.view.View;import android.widget.Button;import android.widget.Toast;public class MainActivity extends ActionBarActivity { /* * 直接使用匿名内部类 new出View的接口【new View.OnClickListener(......);】 * 1、声明获取控件对象(一般Activity中有很多控件,控件与控件直接有很多交互,为了引用方便,因此声明为全局变量) * 2、注册(设置)监听器 * 3、重写方法,编写相应逻辑代码 */ private Button btn_show; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.incident); //1、 btn_show=(Button) findViewById(R.id.btn_show); //2、 btn_show.setOnClickListener(new View.OnClickListener() { //匿名内部类,View类的接口 //context:指的是当前类的实例化对象 @Override //3、 public void onClick(View v) { Toast.makeText(MainActivity.this, "您点击了按钮", Toast.LENGTH_LONG).show(); Log.i("zwb", "您点击了按钮"); } }); }}
3.运行结果(Toast和Log日志)
二、让主类(MainActivity1)继承接口(OnClickListener)的方法
1.incident.xml代码,和1中相同,省略。
2.MainActivity1.java代码
package com.zero.buttonincident;import android.app.Activity;import android.os.Bundle;import android.util.Log;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;import android.widget.Toast;public class MainActivity1 extends Activity implements OnClickListener { /* *让主类(MainActivity1)继承接口(OnClickListener)添加事件监听器的一般步骤 *1、获取控件对象(一般Activity中有很多控件,控件与控件直接有很多交互,为了引用方便,因此设置为全局变量) *2、注册(设置)监听器 btn_show.setOnClickListener(this); *3、重写onClick方法,编写具体的逻辑代码 * */ private Button btn_show; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.incident);//设置此MainActivity1所显示的布局 //1、 btn_show=(Button) findViewById(R.id.btn_show); //2、 btn_show.setOnClickListener(this);/*监听器类型必须是接口类型(其中参数this是当前类的对象,即MainActivity1此类 因此需要让其继承相应接口,并重写方法)*/ } //3、 @Override public void onClick(View arg0) { Toast.makeText(this, "您点击了按钮,两个this都是实相应接口类的对象", Toast.LENGTH_LONG).show(); Log.i("zwb", "您点击了按钮"); }}
3.运行结果
三、在.xmlButton属性中添加android:onClick=”自定义的方法名”
1.贴.xml代码
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <!--在.xml中直接添加属性android:onClick="btnClick"引号中是方法名 --> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/btn_show" android:textSize="14sp" android:textColor="#00f" android:layout_marginTop="10dp" android:onClick="btnClick"/></LinearLayout>
2.贴MainActivity2.java 代码
package com.zero.buttonincident;import android.app.Activity;import android.os.Bundle;import android.util.Log;import android.view.View;import android.widget.Toast;public class MainActivity2 extends Activity { /* * 最简单的方法,只需要两步便可完成 * 1、在.xml添加事件属性: android:onClick="btnClick" * 2、在主MainActivity2类中重写:public void btnOclick(View v){.....} */ @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.incident1);//设置此MainActivity1所显示的布局 } //完全自定义的 public void btnClick(View arg0){ String text="您点击了按钮,这是最简单的方法!!"; Toast.makeText(this, text, Toast.LENGTH_LONG).show(); Log.i("zwb", "您点击了按钮"); }}
3.运行结果
四、使用内部类来实现
1.incident.xml文件代码
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <Button android:id="@+id/btn_show" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/btn_show" android:textSize="14sp" android:textColor="#00f" android:layout_marginTop="10dp"/></LinearLayout>
2.MainActivity3.java文件代码
package com.zero.buttonincident;import android.app.Activity;import android.os.Bundle;import android.util.Log;import android.view.View;import android.widget.Button;import android.widget.Toast;public class MainActivity3 extends Activity { /* *使用内部类 *1、定义一个内部类,实现View.OnClickListener接口,并重写onClick()方法 *2、在绑定事件监听器时,直接new一个内部类对象作为参数 */ private Button btn_show; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.incident);//设置此MainActivity1所显示的布局 btn_show=(Button) findViewById(R.id.btn_show); btn_show.setOnClickListener(new btnClickListener());/*监听器类型必须是接口类型*/ } class btnClickListener implements View.OnClickListener{ @Override public void onClick(View v) { String text ="您点击了按钮,使用内部类来实现"; Toast.makeText(MainActivity3.this, text, Toast.LENGTH_LONG).show(); Log.i("zwb", text); } }}
3.运行结果
五、使用外部类来实现
1.在incident2.xml文件中加入垂直居中的TextView,来代替Toast显示文字
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <Button android:id="@+id/btn_show" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/btn_show" android:textSize="14sp" android:textColor="#00f" android:layout_marginTop="10dp"/> <TextView android:id="@+id/tv_show" android:gravity="center_vertical" android:layout_width="match_parent" android:layout_height="wrap_content"/></LinearLayout>
2.外部类OutClick.java代码
package com.zero.buttonincident;import android.view.View;import android.view.View.OnClickListener;import android.widget.TextView;public class OutClick implements OnClickListener{ private TextView textshow; //利用构造方法把文本框作为参数传入,通过 textshow.setText();来设置显示内容 public OutClick(TextView text) { textshow = text; } @Override public void onClick(View v) { textshow.setText("点击了按钮,采用外部类来实现"); }}
3.MainActivity.java代码
package com.zero.buttonincident;import android.app.Activity;import android.os.Bundle;import android.widget.Button;import android.widget.TextView;public class MainActivity4 extends Activity { private Button btn_show; private TextView textshow; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.incident2);//设置此MainActivity1所显示的布局 btn_show=(Button) findViewById(R.id.btn_show); textshow=(TextView)findViewById(R.id.tv_show); //直接new一个外部类,并把TextView作为参数传入 btn_show.setOnClickListener(new OutClick(textshow));/*监听器类型必须是接口类型*/ }}
4.运行结果
心得总结一、给按钮添加监听器的基本步骤
1、声明获取控件对象
2、注册(设置)监听器
3、重写方法,编写相应逻辑代码
心得总结二、监听器类型是接口类型,并重写接口里面的方法,从上面可以看出来,不论哪种方法,都会实现对应的接口,匿名内部类通过View点出的。
心得总结三、关键字this:this都是实相应接口类的对象。在传入是要注意是不是当前所实现对应接口的类的对象,来context上写文。(易错点)
心得总结四、5中方法的比较
1、匿名内部类:在Toast是注意context上下文的this容易出错,此方法被控件绑死了,复用性差.
2、让主类(MainActivity1)继承接口(OnClickListener)的方法
3、给控件设置属性:代码贼简单,但是不变与维护,容易出bug,比如在.java文件中将方法名该一下,代码不会报错,甚至能运行,但是会停止运行的。
4、内部类的方法:该类中进行复用,可直接访问外部类的所有界面组件。灵活有利于代码的重用。
5、外部类的方法:因为外部类不能直接访问用户界面 类中的组件,要通过构造方法将组件传入使用;这样导致的结果就是代码不够简洁。
心得总结五、关于2、和4、方法的代码
1.xml文件
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <EditText android:id="@+id/et_show" android:layout_width="match_parent" android:layout_height="wrap_content" android:hint="@string/et_show" android:inputType="text"/> <Button android:id="@+id/btn_show" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/btn_show" android:textSize="14sp" android:textColor="#00f" android:layout_marginTop="10dp"/> <Button android:id="@+id/btn_show1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/btn_show1" android:textSize="14sp" android:textColor="#00f" android:layout_marginTop="10dp"/></LinearLayout>
2.java文件
package com.zero.buttonincident;import android.app.Activity;import android.os.Bundle;import android.util.Log;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;import android.widget.EditText;import android.widget.Toast;public class MainActivity5 extends Activity implements OnClickListener { /* *让主类(MainActivity1)继承接口(OnClickListener)添加事件监听器的一般步骤 *1、获取控件对象(一般Activity中有很多控件,控件与控件直接有很多交互,为了引用方便,因此设置为全局变量) *2、注册(设置)监听器 btn_show.setOnClickListener(this); *3、重写onClick方法,编写具体的逻辑代码 *4、巧用switch...case语句,转换id */ private Button btn_show; private Button btn_show1; private EditText et_show; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.incident3);//设置此MainActivity1所显示的布局 btn_show=(Button) findViewById(R.id.btn_show); btn_show1=(Button) findViewById(R.id.btn_show1); et_show=(EditText) findViewById(R.id.et_show); btn_show.setOnClickListener(this); btn_show1.setOnClickListener(this);/*监听器类型必须是接口类型,this是当前主类的对象,此类实现了相应的接口*/ } @Override public void onClick(View v) { String text=et_show.getText().toString(); //编程技巧,使用switch...case语句来切换事件源,参数v一般指的事件源 switch(v.getId()){ case R.id.btn_show: text+="点我按钮"; break; case R.id.btn_show1: text+="戳我按钮"; break; } Toast.makeText(this,text, Toast.LENGTH_LONG).show(); Log.i("zwb", text); }}
3.运行结果,由于敲代码时间有点长,hello写错了。。。
0 0
- Day5、五种不同的事件监听器
- Android 系列 6.11以五种不同的方式处理事件监听器
- 点击事件监听器的五种写法
- 事件处理之二:点击事件监听器的五种写法
- 事件处理之二:点击事件监听器的五种写法
- 事件监听器的4种实现方式
- 事件监听器的几种配置方法
- Servlet的事件监听器
- Servlet的事件监听器
- 关于Button、RadioGroup、CheckBox三种不同的监听器
- day5-jacascript-事件
- J2ME:rms的事件监听器
- J2ME:rms的事件监听器
- java_事件监听器的实现
- 事件与监听器的类型
- java的事件监听器学习
- Android的事件和事件监听器
- Java实现事件监听器的四种方式
- netstat 与tasklist
- SAS硬盘-神级高性能硬件盘点
- Rebuilding Roads--树形DP
- Reveal查看他人APP
- SSL JudgeOnline 1357——有重复元素的全排列
- Day5、五种不同的事件监听器
- echarts3.0之关系图详解
- oracle查看当前用户权限
- 微信小程序开发学习
- bootstrap插件中dialog与confirm同时出现会使界面产生混乱
- 终于找到了不用自定义一个activity栈,来关闭所有activity的方法了!!!
- 链式前向星存储实现BFS
- swift3.0 筆記
- 如何获取url中的参数并传递给iframe中的报表