5.谈谈内部listener及吐槽

1.应用场景:自定义控件接收点击事件,为了提高复用性,把点击后产生的行为交给它所处控制器去做

2.Android中使用的五大步骤:这些内部定义及调用都是在自定义的adapter中去做的,它是受adapter这个第三方去管理

    2.1 Listener私有变量声明:private Listener listener

    2.2 定义为interface类型:interface Listener{

                                                                          void onClick(int position);

                                                                          }

    2.3 set方法:public void setListerner(Listerner listener){ 

                                                                                              this.listerer = listener;

                                                                                            }

    2.4 内部调用: xxView.setOnClickListerer(new View.OnClickListener(){

                                                                      public void conClick(View v){

                                                                                if(listerer != null){

                                                                                  listener.onClick(position);

                                                                             }

                                                                  )

                                                            });

      2.5 外部实现:adapter.setListener(new xxAdapter.Listener(){});

3.使用原理:正常的类都是自定定义方法,自己去实现,但是为了实现这样一个点击事件的复用需求,就产生了这么一个内部接口listener,可以把它理解为一个特殊的类型,它不可以new出一个对象,但它可以产生成员变量,它指向匿名内部对象,这样它就可以调用它的接口方法,因为方法在外部控制器中的匿名内部对象中实现了,方法是不能作为参数传递的,java中把接口方法包装到匿名内部类对象中,因为控制器中没有给它独立的方法位置,那你就只能龟缩到参数的位置了

4.吐槽:new xxListener(){},这种写法也真是挺奇葩的,设计java的搞出这么一个迷惑性的写法,是让人不要望文生义吗?所以无视不要被带偏,它不是new一个接口对象,它只是这么一个写法,表示new一个实现了该接口的匿名内部对象,该对象是可以用接口变量接收的,接口委托给了匿名对象去实现它的方法,但是与ios比起来,java额外搞出这么一个匿名对象有些绕了,因为你要实质用的就是这么一个代码块而已,只不过它作为了一个参数传递,该代码块完全可以用一个指针去引导传递,ios中用了block,闭包,delegate这些概念去处理,结构很清晰。

5.待议:以后有新的想法再补充!

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值