野人学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.当然,以上的监听方法都能实现,具体的应用就看具体的分析,还是希望大家多多练习,这样才能熟能生巧。





0 0