野人学Android基础篇之初探UI控件第三课--Button
来源:互联网 发布:js的随机数生成 编辑:程序博客网 时间:2024/06/05 17:44
如果你有一点web开发的经验,对于Button的click事件,应该很好理解。如果没有,那么记住Button的最大作用就是点击。在Android开发中,实现Button的click事件要分成两步,第一步是监听到click事件,第二步才是执行click事件。对于第二步,理解起来没有什么难度,难就难在第一步。电脑是非常笨的,需要一套Button的监听机制来保证click事件的顺利进行。
我总结了一下,Button的监听机制主要分成两类:
第一类,通过类的实现来监听,包括匿名内部类、内部类、外部类,接口类;
第二类,通过xml标签中onclick属性绑定特定方法来实现。
在讲第一类的时候,还是要插一句,这个知识点还是建立在有一定Java基础的前提下进行的。
1.1匿名内部类,代码如下:
public class MainActivity extends Activity {private TextView textview;private Button button1; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.button); textview = (TextView) findViewById(R.id.textView1); button1 = (Button) findViewById(R.id.button1); //匿名内部类 button1.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {// TODO Auto-generated method stubtextview.setText("这是匿名内部类效果");}}); }}
这里要介绍一下"setOnClickListener",这个方法是第一类监听机制中的核心。不管是匿名内部类、内部类还是接口类,"setOnClickListener"这个方法都会用到,按照其字面意思也可以很好理解,“设置点击事件的监听者”。ok,匿名内部类的实现就是在这个方法内new了一个OnClickListener的方法,然后在onClick中写入执行代码就可以了。PS:写入上面代码的时候,Eclipse会报错,主要是没有导入onClickListener的包,导入就没有问题了。
1.2接口类,代码如下:
public class MainActivity extends Activity implements OnClickListener{private TextView textview;private Button button2; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.button); textview = (TextView) findViewById(R.id.textView1); button2 = (Button) findViewById(R.id.button2); //接口类 button2.setOnClickListener(this); } @Overridepublic void onClick(View v) {// TODO Auto-generated method stubtextview.setText("这是接口类效果");}}
接口类就是implements了OnClickListener这一接口,然后在类中通过setOnClickListener来实现事件监听,通过重写onClick方法来执行click代码。setOnClickListener(this)中的this指的是上下文,也就是MainActivity类本身。如果理解起来有点困难,还是多看看些Java的基础知识吧。
1.3内部类,代码如下:
public class MainActivity extends Activity {private TextView textview;private Button button3; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.button); textview = (TextView) findViewById(R.id.textView1); button3 = (Button) findViewById(R.id.button3); //内部类 button3.setOnClickListener(new buttonlister()); } public class buttonlister implements OnClickListener{@Overridepublic void onClick(View v) {// TODO Auto-generated method stubtextview.setText("这是内部类效果");} }}
内部类实现的逻辑其实跟接口类差不多,只是将click监听事件独立了出来,然后通过新的类进行封装,然后在MainActivity中new一下。当然,你也可以将click监听事件的类写成外部类,其实现的方式是一样的,我就不多说了。
2.通过xml标签中onclick属性绑定特定方法来实现
这种方式有点像web开发中的click事件,Android中的xml就像web中的html,Android中的监听方法就像web中的javascript的方法。好了,不多说了,代码呈上,其中关系还请各位客官慢慢体会。
<Button android:id="@+id/button4" android:layout_width="200dp" android:layout_height="100dp" android:onClick="doclick" android:text="绑定标签" />
在xml中的Botton标签中插入"onClick"属性,后面的属性值"doclick"指的是方法的名称,和java代码中的方法名一致,代码如下:
public void doclick(View v){switch (v.getId()) {case R.id.button4:textview.setText("这是绑定标签的效果");break;default:break;}}
doclick方法写在MainActivity类中就可以了。v.getId()的返回值是你click的button的id,这个id是int型的数字,所以要与R.id.button4(注解,在R文件中button4对应的id是int型的数字)进行匹配,匹配成功后执行click代码。如果一个Activity中出现多个Button的时候,可以通过switch的形式来进行判断,这样会比较方便。
最后总结一下:
1.如果一个Activity中出现多个button,那么我建议使用标签绑定法,因为其他方法会实现很多类,代码会很冗长;
2.如果一个Activity只有一个button,其实匿名内部类和接口类都是不错的选择,如果为了代码解耦,可以使用内部类;
3.当然,以上的监听方法都能实现,具体的应用就看具体的分析,还是希望大家多多练习,这样才能熟能生巧。
- 野人学Android基础篇之初探UI控件第三课--Button
- 野人学Android基础篇之初探UI控件第一课--TextView静态赋值
- 野人学Android基础篇之初探UI控件第一课--TextView动态赋值
- 野人学Android基础篇之初探UI控件第二课--ImageView静态赋值
- 野人学Android基础篇之初探UI控件第二课--ImageView动态赋值
- 野人学Android基础篇之初探UI控件第四课--CheckBox
- 野人学Android基础篇之初探UI控件第五课--RadioGroup
- 野人学Android基础篇之初探UI控件第六课--ListView和他的adapter们(一)
- 野人学Android基础篇之初探UI控件第六课--ListView和他的adapter们(二)
- 野人学Android基础篇之初探UI控件第六课--ListView和他的adapter们(三)
- 野人学Android基础篇之初探UI控件第六课--ListView和他的adapter们(四)
- Android基础UI控件之Button
- 野人学Android基础篇之网络通讯第二课--本地apache服务器与Android的连接
- 野人学Android基础篇之HelloWorld程序第一课--程序目录介绍
- 野人学Android基础篇之HelloWorld程序第二课--Manifest.xml的不完全解释
- 野人学Android基础篇之四大组件第一课--Activity的生命周期
- 野人学Android基础篇之四大组件第一课--Activity的Intent传递
- 野人学Android基础篇之异步任务第一课--AsyncTask原理简介及例子
- POJ2676 2918 Sudoku 暴搜
- 二十年目睹之怪状 序
- 命令行参数
- final、finally和finalize的区别
- VS2010 (C#)winform程序打包发布图解(转+自己修改)
- 野人学Android基础篇之初探UI控件第三课--Button
- UVa 11536:Smallest Sub-Array(滑动窗口)
- 8-25
- SSM框架搭建,新手学习中,欢迎指教
- 字符串全排列问题(递归回溯)
- django1.8 model (1):Model syntax
- 选举
- Android UI设计——ListView控件使用优化(五)
- hdu 5407 CRB and Candies(素数筛选法,除法取模(乘法逆元))