android 中控件可以设置点击事件,有幸看到android源码,故作小记!没有其它什么不可思议之处!所以,你必须在很休闲的时候看本篇博客,否则那是在浪费时间。

这篇博客:

<1> 使用 Java 语言模拟 android 中 Button 的 click 事件

<2> 分享 Button 控件的一个 xml 属性

<3> 分享一篇关于 android MVC 的文章


1. Observer 回顾


Observer pattern,观察者模式。观察者模式在Android中有着广泛的应用,尤其是在Listener中应用广泛。

观察者模式又叫做发布-订阅(Publish/Subscribe)模式、模型-视图(Model/View)模式、源-监听器(Source/Listener)模式或从属者(Dependents)模式。

观察者模式定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。这个主题对象在状态上发生变化时,会通知所有观察者对象,使它们能够自动更新自己。


2. 新建 Java project


随便起个名称,无所谓的。


3. View.java


这个类是Button的父类,实现了一些重要事件如绑定事件,点击事件。其中点击事件,在这里使用内部接口实现(android 源码也是这样做的)。具体看代码:

package mark.zhang;/** * @author mark * View 类 */public class View {OnClickListener listener = null;/** * 注册事件,用于设置监听 * @param listener */public void setOnClickListener(OnClickListener listener) {this.listener = listener;}/** * 点击事件 */public void performClick() {if (listener != null) {listener.onClick(this);}}/** * @author mark * 内部接口 */public interface OnClickListener {public void onClick(View v);}}

注意:这里的内部接口,主要是用于实现“回调”。


4. Button.java


package mark.zhang;public class Button extends View {/** * construtor */public Button() {// nothing to do }}

5. Activity.java


package mark.zhang;import mark.zhang.View.OnClickListener;public class Activity implements OnClickListener {/** * 覆写实现接口的方法 */@Overridepublic void onClick(View v) {System.out.println("onClick() is callback!");}/** * main 方法,测试 * @param args */public static void main(String[] args) {// 创建 Button 实例Button btn = new Button(); // 设置监听器btn.setOnClickListener(new Activity());// 假如您点击了 Button// 在 androi 中这一步是自动回调的,这里只是模拟btn.performClick();}}
ok,至此模拟 android button 点击事件完毕!

好吧,回到 android的Button上面来,分享一个xml属性。看代码:

6. main.xml


<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:orientation="vertical"    android:layout_width="fill_parent"    android:layout_height="fill_parent"    ><TextView      android:id="@+id/tv"    android:layout_width="fill_parent"     android:layout_height="wrap_content"     android:text="@string/hello"    android:singleLine="true"    android:ellipsize="middle"    /><Button     android:id="@+id/btn_click"    android:onClick="myOnClick"    android:layout_width="fill_parent"     android:layout_height="wrap_content"     android:text="no_set"/></LinearLayout>

在上面的main.xml文件中,使用onClick属性。主要目的是为该Button设置一个监听器。接着看代码。


7. Activity 代码


package mark.zhang;import android.app.Activity;import android.content.ComponentName;import android.content.Intent;import android.os.Bundle;import android.os.Parcelable;import android.text.TextUtils.TruncateAt;import android.util.Log;import android.view.Menu;import android.view.MenuInflater;import android.view.MenuItem;import android.view.MotionEvent;import android.view.View;import android.view.View.OnClickListener;import android.view.View.OnTouchListener;import android.widget.Button;import android.widget.TextView;public class DroidTestActivity extends Activity {@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.main);}/** * 该方法一定要与Button的onClick属性值一致,否则点击时会报错 */public void myOnClick(View view) {switch (view.getId()) {case R.id.btn_click:Log.d("mark", "myOnClick() is invoked!");break;}}}
运行app,点击button,控制台会输出:

D/mark    (  227): myOnClick() is invoked!


分享一篇好文章给您:http://www.moandroid.com/?p=439


最后,感谢:http://my.unix-center.net/~Simon_fu/?p=665








更多相关文章

  1. android 数据库技术 | 文件系统,SDCARD访问,CONTENT PROVIDER,SQLIT
  2. [转载]Android触屏滑动事件总结 (2011-08-08 10:14:25)
  3. 《Android 开发艺术探索》笔记——(3)View 的事件体系
  4. Android 启动模式

随机推荐

  1. Android(安卓)gradle proguard 代码混淆
  2. Android(安卓)TwoLineListItem
  3. android的互联网开发
  4. android tablehost中tab中显示数字
  5. Android 如何实现带滚动条的TextView,在更
  6. 性能优化系列总篇
  7. Android如何通过shareduserid获取系统权
  8. Android的按键处理
  9. Android(安卓)NDK隐藏jni动态库的内部符
  10. Android中pm命令用法详解