2023学年完整公开课版Android事件机制_第1页
2023学年完整公开课版Android事件机制_第2页
2023学年完整公开课版Android事件机制_第3页
2023学年完整公开课版Android事件机制_第4页
2023学年完整公开课版Android事件机制_第5页
已阅读5页,还剩11页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

《通信业务开发》课程Android事件机制Android事件机制事件机制基于监听事件基于回调事件PART18-1绑定标签事件机制示例事件:Event人机交互的行为例如:点击、双击、拖动、创建、长按、输入View控件….触摸、左划、上划、多点触摸屏幕…键盘按下、抬起……事件要素:事件源事件类型事件处理:响应规则事件机制示例基于监听:委派式处理,为监听对象绑定监听器监听器监听事件是否发生并做出响应基于回调通用性事件处理,自身回调若能处理,则回调并内部消化若不能处理,则广播“Ican’t”绑定标签:控件事件处理,属性绑定响应方法响应基于回调事件示例回调方法:特殊的类成员方法,Android绝大部分组件都提供事件回调方法基于回调的事件处理时,只需重写组件中特定回调方法,编写事件响应代码当事件触发时,系统根据具体情景自动调用调用组件回调方法处理回调若能完全处理事件,则返回true;否则返回false,并把事件传播出去,由系统处理规则publicclassThirdAcextendsActivity{@OverrideprotectedvoidonCreate(BundlesavedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.third);}@OverrideprotectedvoidonPause(){super.onPause();}@OverridepublicbooleanonKeyDown(intkeyCode,KeyEventevent){returnsuper.onKeyDown(keyCode,event);}@OverridepublicbooleanonCreateOptionsMenu(Menumenu){returnsuper.onCreateOptionsMenu(menu);}}Activity中的回调方法基于监听事件示例获取监听对象(事件源)创建监听器类(实现相应事件监听接口XxxListener)为监听对象绑定监听器:调用事件源setXxxListener方法,为其绑定或注册监听器对象步骤No.事件接口处理方法1单击View.OnClickListenerpublicabstractvoidonClick(Viewv)2长按View.OnLongClickListenerpublicabstractbooleanonLongClick(Viewv)3键盘View.OnKeyListenerpublicabstractbooleanonKey(Viewv,intkeyCode,KeyEventevent)4焦点切换View.OnFocusChangeListenerpublicabstractvoidonFocusChange(Viewv,booleanhasFocus)5触摸View.OnTouchListenerpublicabstractbooleanonTouch(Viewv,MotionEventevent)6创建上下文菜单View.OnCreateContextMenuListenerpublicabstractvoidonCreateContextMenu(ContextMenumenu,Viewv,ContextMenu.ContextMenuInfomenuInfo)1常用事件及监听器接口不同的View控件拥有不同的事件No.方法类型描述1publicvoidsetOnClickListener(View.OnClickListenerl)普通注册单击事件2publicvoidsetOnLongClickListener(View.OnLongClickListenerl)普通注册长按事件3publicvoidsetOnKeyListener(View.OnKeyListenerl)普通注册键盘事件4publicvoidsetOnFocusChangeListener(View.OnFocusChangeListenerl)普通注册焦点改变事件5publicvoidsetOnTouchListener(View.OnTouchListenerl)普通注册触摸事件6publicvoidsetOnCreateContextMenuListener(View.OnCreateContextMenuListenerl)普通注册上下文菜单事件2常用事件注册绑定方法(View)不同的View控件拥有不同的事件,View控件类中的事件注册绑定方法也不完全一样基于监听事件内部监听类:将事件监听器定义成当前类的内部类。匿名内部类:使用匿名内部类创建事件监听器对象Activity事件监听器:让Activity本身实现监听器接口,并实现事件处理方法外部监听类:将事件监听器定义成一个外部类实现示例基于监听事件publicclassMainAcextendsActivity{EditTextedit1,edit2,edit3;Buttonbtn1;@OverridepublicvoidonCreate(BundlesavedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.main);

edit1=(EditText)findViewById(R.id.editText1);edit2=(EditText)findViewById(R.id.editText2);edit3=(EditText)findViewById(R.id.editText3);btn1=(Button)findViewById(R.id.button1);

OnBtn1ClickbtnListener=newOnBtn1Click();OnBtn1btn1.setOnClickListener(btnListener);

}

//内部监听类classOnBtn1ClickimplementsOnClickListener{@OverridepublicvoidonClick(Viewv){intnum1=Integer.parseInt(edit1.getText().toString());intnum2=Integer.parseInt(edit2.getText().toString());

intresult=num1+num2;edit3.setText(Integer.toString(result));}}}按钮点击监听实现1内部监听类基于监听事件publicclassMainAcextendsActivity{EditTextedit1,edit2,edit3;Buttonbtn1;@OverridepublicvoidonCreate(BundlesavedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.main);

edit1=(EditText)findViewById(R.id.editText1);edit2=(EditText)findViewById(R.id.editText2);edit3=(EditText)findViewById(R.id.editText3);btn1=(Button)findViewById(R.id.button1);

//匿名内部类OnBtn1btn1.setOnClickListener(newOnClickListener(){@OverridepublicvoidonClick(Viewv){

intnum1=Integer.parseInt(edit1.getText().toString());intnum2=Integer.parseInt(edit2.getText().toString());

intresult=num1+num2;edit3.setText(Integer.toString(result));}});

}}监听器实现方式2匿名内部类基于监听事件publicclassMainAcextendsActivityimplementsOnClickListener{EditTextedit1,edit2,edit3;Buttonbtn1;@OverridepublicvoidonCreate(BundlesavedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.main);

edit1=(EditText)findViewById(R.id.editText1);edit2=(EditText)findViewById(R.id.editText2);edit3=(EditText)findViewById(R.id.editText3);btn1=(Button)findViewById(R.id.button1);

OnBtn1btn1.setOnClickListener(this);

}

//Activity实现OnClickListener接口,成为监听器

@Override

publicvoidonClick(Viewv){if(v.getId()==R.id.button1){intnum1=Integer.parseInt(edit1.getText().toString());intnum2=Integer.parseInt(edit2.getText().toString());intresult=num1+num2;edit3.setText(Integer.toString(result));}}}监听器实现方式3Activity监听基于监听事件publicclassMainAcextendsActivity{EditTextedit1,edit2,edit3;Buttonbtn1;@OverridepublicvoidonCreate(BundlesavedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.main);

edit1=(EditText)findViewById(R.id.editText1);edit2=(EditText)findViewById(R.id.editText2);edit3=(EditText)findViewById(R.id.editText3);btn1=(Button)findViewById(R.id.button1);

OnBtn1ClickbtnListener=newOnButtonClick();OnBtn1btn1.setOnClickListener(btnListener);

}}//外部监听类classOnButtonClickimplementsOnClickListener{@OverridepublicvoidonClick(Viewv){……}}按钮点击监听实现4外部监听类绑定标签示例部分View控件事件被封装为控件属性在UI布局设计时,为指定View控件事件属性设值,指定该事件触发时响应方法在Activity中定义事件响应方法,编写具体事件处理代码注意:控件事件属性值(即响应方法)必须与Activity中定义的事件响应方法名称一致,否则出错规则并非所有控件事件都可封装为控件属性,OnClick最为常见<EditTextandroid:id="@+id/editText1"android:layout_width="wrap_content"android:layout_height="wrap_content”/><TextViewandroid:id="@+id/textView1"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="+”/><EditTextandroid:id="@+id/editText2"android:layout_width="wrap_content"android:layout_height="wrap_content“/><Buttonandroid:id="@+id/button1"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="="

android:onClick="OnbtnCalculate“/><EditTextandroid:id="@+id/editText3"android:layout_height="wrap_content"android:layout_width="wrap_content"android:editable="false“/

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论