漫步雨

雾里看花,雨中垒码

博客园 首页 新随笔 联系 订阅 管理

按钮和文本框算是比较简单的控件了,以下主要讲按钮的事件响应,三种写法(匿名内部类响应事件、外部类响应事件、本类直接响应事件)

点击按钮后文本框中会显示 ”按钮被单击了”,先看效果:

以下是这个界面的布局文件:

 1 <?xml version="1.0" encoding="utf-8"?>
 2 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 3 android:layout_width="match_parent"
 4 android:layout_height="match_parent"
 5 android:orientation="vertical" >
 6 
 7 <Button
 8 android:id="@+id/button1"
 9 android:layout_width="match_parent"
10 android:layout_height="wrap_content"
11 android:text="点我" />
12 
13 <TextView
14 android:id="@+id/textView1"
15 android:layout_width="match_parent"
16 android:layout_height="wrap_content"
17 android:hint="等待单击" /> <!-- 默认未被单击时的提示信息 -->
18 
19 </LinearLayout>

首先看第一种匿名内部类写的监听事件处理方式:

 1 package com.example.helloworld;
 2 
 3 
 4 import android.app.Activity;
 5 import android.os.Bundle;
 6 import android.view.View;
 7 import android.view.View.OnClickListener;
 8 import android.widget.Button;
 9 import android.widget.TextView;
10 
11 
12 public class MainActivity extends Activity {
13     
14     private Button btn1;   //声明按钮对象
15     private TextView tv1;  //声明文本框对象
16     
17     @Override
18     protected void onCreate(Bundle savedInstanceState) {
19         super.onCreate(savedInstanceState);
20         setContentView(R.layout.myactivity_main);
21         
22         //以下代码以匿名内部内的方式处理按钮click事件
23         
24         //初始化两个控件对象的实例,学过MFC的是不是很熟悉,和GetDlgItem api类似的道理了
25         btn1 = (Button) findViewById(R.id.button1);
26         tv1 = (TextView) findViewById(R.id.textView1);
27         
28         //这里设置按钮被Click时的处理函数,是new一个OnClickListener的匿名内部类来实现的
29         btn1.setOnClickListener(new OnClickListener() {
30             
31             //重载了OnClickListener接口的onClick方法,处理被占击后的事件
32             @Override
33             public void onClick(View v) {
34                 // TODO Auto-generated method stub
35                 tv1.setHint("按钮被单击了");
36             }
37         });
38     }
39 }

再看外部类的写法,其实很简单了,就再加个类而已:

 1 package com.example.helloworld;
 2 
 3 
 4 import android.app.Activity;
 5 import android.os.Bundle;
 6 import android.view.View;
 7 import android.view.View.OnClickListener;
 8 import android.widget.Button;
 9 import android.widget.TextView;
10 
11 
12 public class MainActivity extends Activity {
13     
14     private Button btn1;   //声明按钮对象
15     private TextView tv1;  //声明文本框对象
16     
17     //这里声明了一个方法可以访问到TextView的对象
18     public TextView getTv1() {
19         return tv1;
20     }
21 
22     @Override
23     protected void onCreate(Bundle savedInstanceState) {
24         super.onCreate(savedInstanceState);
25         setContentView(R.layout.myactivity_main);
26         
27         //以下代码以外部类的方式处理按钮click事件
28         
29         //初始化两个控件对象的实例,学过MFC的是不是很熟悉,和GetDlgItem api类似的道理了
30         btn1 = (Button) findViewById(R.id.button1);
31         tv1 = (TextView) findViewById(R.id.textView1);
32         
33         //这里采用外部类MyOnClick实现事件处理
34         btn1.setOnClickListener(new MyOnClick(this));
35     }
36 }
37 
38 
39 //外部类,实现OnClickListener接口
40 class MyOnClick implements OnClickListener {
41 
42     private MainActivity baseActivity; 
43     
44     //该构造函数的作用主要用于访问到TextView对象
45     public MyOnClick(MainActivity mt) {
46         baseActivity = mt;
47     }
48     
49     @Override
50     public void onClick(View v) {
51         // TODO Auto-generated method stub
52         baseActivity.getTv1().setHint("按钮被单击了");
53     }
54 }

最后是activity类直接继承接口并实现事件响应,也是简单:

 1 package com.example.helloworld;
 2 
 3 
 4 import android.app.Activity;
 5 import android.os.Bundle;
 6 import android.view.View;
 7 import android.view.View.OnClickListener;
 8 import android.widget.Button;
 9 import android.widget.TextView;
10 
11 
12 //本类直接实现接口OnClickListener
13 public class MainActivity extends Activity implements OnClickListener {
14     
15     private Button btn1;   //声明按钮对象
16     private TextView tv1;  //声明文本框对象
17     
18     @Override
19     protected void onCreate(Bundle savedInstanceState) {
20         super.onCreate(savedInstanceState);
21         setContentView(R.layout.myactivity_main);
22         
23         //以下代码以本类直接实现接口的方式处理按钮click事件
24         
25         //初始化两个控件对象的实例,学过MFC的是不是很熟悉,和GetDlgItem api类似的道理了
26         btn1 = (Button) findViewById(R.id.button1);
27         tv1 = (TextView) findViewById(R.id.textView1);
28         
29         //这里因为是本类直接实现接口,直接给this指针就是了
30         btn1.setOnClickListener(this);
31     }
32 
33     @Override
34     public void onClick(View v) {
35         // TODO Auto-generated method stub
36         tv1.setHint("按钮被单击了");
37     }
38 }

 

好了,处理按钮的OnClick事件上面只是实现了三种Java的写法而已,没什么技术含量,同理该按钮的其它事件也可以像上面一样处理。

 

posted on 2015-03-07 12:25  漫步雨  阅读(277)  评论(0编辑  收藏  举报