当前位置: 首页 > 科技观察

鸿蒙OS实战——点击事件的四种写法_0

时间:2023-03-21 12:51:41 科技观察

更多内容请访问:https://harmonyos.51cto.com,与华为官方共建的鸿蒙技术社区。点击事件的四种写法1、自己写实现类写实现类(MyListener)实现Component.ClickedListener接口在类中重新下载onClick方法,在onClick方法中写点击代码实现操作即可实现代码:创建工程名称:ListenerApplicationability_main.xmlMainAbilitySlicepackagecom.example.listenerapplication.slice;importcom.example.listenerapplication.ResourceTable;importohos.aafwk.abilitySlice;importohos.aafwk.content.Intent;importohos.agp.components.Button;importohos.agp.components.Component;publicclassMainAbilitySliceextendsAbilitySlice{@OverridepublicvoidonStart(Intentintent){super.onStart(intent);super.setUIContent(ResourceTable.Layout_ability_main);//1.找到按钮//完成写法:this.findComponentById(ResourceTable.Id_but1);//this:这个类的对象,指的是:MainAbilitySlice(子界面对象)//在子界面中,通过id找到对应的组件//使用this来调用方法,this可以省略//findComponentById(ResourceTable.Id_but1);//返回一个组件对象(so是组件的父类对象)//那么我们真正写代码的时候,需要向下转型:强制Componentbut1=(Button)findComponentById(ResourceTable.Id_but1);//2.给按钮绑定点击事件。点击的时候会执行MyListener里面的方法,点击一次执行一次//方法就是下面点击的内容but1.setClickedListener(newMyListener());}@OverridepublicvoidonActive(){super.onActive();}@OverridepublicvoidonForeground(Intentintent){super.onForeground(intent);}}classMyListenerimplementsComponent.ClickedListener{@OverridepublicvoidonClick(Componentcomponent){//组件:所有组件父类//组件参数:被点击的组件对象,这里表示根据你的对象//组件.setText();setText是子类特有的方法,需要向下改造:强行切换为Buttonbut=(Button)component;but.setText("clicked");}}强制操作:点击后:2.在当前类实现接口ability_main.xml中放入ohos:text_size="50",其他的跟进上面的还是一样的。在MainAbilitySlice中,只需要去掉上面新建的类MyListener,然后AbilitySlice在ClickedListener接口类中实现onClick方法,直接绑定单价事件packagecom.example.listenerapplication.slice;importcom.example。listenerapplication.ResourceTable;importohos.aafwk.ability.AbilitySlice;importohos.aafwk.content.Intent;importohos.agp.components.Button;importohos.agp.components.Component;publicclassMainAbilitySliceextendsAbilitySliceimplementsComponent.ClickedListener{@OverridepublicvoidonStart(Intentintent){super.onStart(意图);super.setUIContent(ResourceTable.Layout_ability_main);//1.找到按钮//全写法:this.findComponentById(ResourceTable.Id_but1);//this:这个类的对象,指的是:MainAbilitySlice(子界面对象)//在子界面中,通过找到对应的组件id//使用this来调用方法,this可以省略//findComponentById(ResourceTable.Id_but1);//返回一个组件对象(所以是组件的父类对象)//那么我们在实际写代码的时候,需要向下改造:forcetoComponentbut1=(Button)findComponentById(ResourceTable.Id_but1);//2.给but1绑定点击事件。当事件触发时,会执行本类中的onClick方法,this代表本类but1.setClickedListener(this);}@OverridepublicvoidonActive(){super.onActive();}@OverridepublicvoidonForeground(Intentintent){super.onForeground(intent);}@OverridepublicvoidonClick(Componentcomponent){Buttonbut=(Button)component;but.setText("被点击-点击事件第二种写法");}}运行:点击后:3.写法的区别自己实现类并实现当前类的接口如果在按钮上添加一个Text文本内容,点击按钮时会修改文本框的内容更改第一种情况的代码:在onStart中添加text1文本文本框上方的方法。Text1是局部变量。如果使用第一种方式(自己写实现类)来写,MyListener是无法调用text1变量的。如果使用第二种方法(当前类实现接口),需要在成员变量中提及text1,然后将点击的内容添加到onClick方法中。如果点击按钮后需要操作其他组件对象,可以使用方法二(当前类实现接口)如果点击按钮后不需要操作其他组件对象,可以使用方法一(写实现类自己)。4、匿名内部类匿名内部类不需要实现implementClickedListener接口,也不需要新建类,但是使用匿名内部类的代码只能使用一次。当代码需要使用一次时,可以使用匿名内部类的形式简化代码,直接用newClickedListener实现,然后从第一个实现方法(自己写实现类)或者第二种方法(当前类实现接口)只是把onClick方法实现了(其实两者的onClick方法的内容是一样的),如下:Componentcomponent){Buttonbut=(Button)component;but.setText("Clicked——点击事件的第三种写法");text1.setText("Clicked");}});运行:点击时触发onClick两次methodsforsettingtextinthemethod(ButtonandTexttexthavechanged)5.方法引用该方法的形参和返回值类型需要与接口中抽象方法中的形参和返回值类型保持一致鳕鱼e实现,布局代码与匿名内部类保持一致,变化如下:直接写onClick方法,不用@Override,然后在onStart方法中直接调用packagecom.example.listenerapplication.slice;importcom。example.listenerapplication.ResourceTable;importohos.aafwk.ability.AbilitySlice;importohos.aafwk.content.Intent;importohos.agp.components.Button;importohos.agp.components.Component;importohos.agp.components.Text;publicclassMainAbilitySliceextendsAbilitySlice{@Text1=nullOverridepublicvoidonStart(Intentintent){super.onStart(意图);super.setUIContent(ResourceTable.Layout_ability_main);Componentbut1=(Button)findComponentById(ResourceTable.Id_but1);text1=(Text)findComponentById(ResourceTable.Id_text1);but1.setClickedListener(this::onClick);}@OverridepublicvoidonActive(){super.onActive();}@OverridepublicvoidonForeground(Intentintent){super.onForeground(intent);}publicvoidonClick(Componentcomponent){Buttonbut=(Button)component;but.setText("Clicked——第一个点击事件四种写法");text1.setText("Clicked");}}当按钮被点击的时候,需要执行这个类中的onClick方法,相当于把下面的publicvoidonClick...方法拿过来,引用了一个bit,并作为一个抽象方法的方法体运行:6.Section当前类更常用作实现类和方法引用。其他写作方法也应掌握和了解。更多信息请访问:Harmonyos.51cto.com,与华为官方合作打造的鸿蒙技术社区