Android中一些细碎问题的严肃探究

2016-08-19  本文已影响287人  拉丁吴

一直以来,andorid开发中会面临各种小问题,比如使用在某处为了图方便用了static修饰符是否合适?明明重写了onTouch()方法,却无法被系统调用,或者只匆匆调用一次完事。又比如有时候明明调用了系统API,键盘却还是无法正常显示.....这一切的背后,到底是人性的扭曲还是道德的沦丧.........,好,我们开始。

键盘显示问题

关于键显示的问题,有如下几个api接口:
第一类

  boolean   showSoftInput(View view, int flags)
  boolean   showSoftInput(View view, int flags, ResultReceiver resultReceiver)

网上大多吐槽这个这类api有问题,我们看看api对于第一个参数的描述:

稍微解释一下,就是当前的view应当是已经获得焦点的,并且是可以接受输入,也就是说当前的view应该是EditText或者是其子类才对。你传个button是交不了货的。

第二类api

1   void   toggleSoftInput(int showFlags, int hideFlags)
2   void  toggleSoftInputFromWindow(IBinder windowToken, int showFlags, int hideFlags)

网上往往说这个api可行,可以正常显示键盘,我们看看api的描述:

两种方式推荐第一种。

static 修饰符的使用

Android开发中,使用static修饰字段或者方法的情况并不少见,而static修饰的东西的特性如下:

用static修饰的字段或方法是很容易调用的,但者绝对不是使用static的理由,

与这个相关的还有final private 等等,虽然他们的作用都很清楚,但是在项目应用中,他们的应用场景未必是清晰的,有机会,我会想去整理这一块的内容。

onTouch()方法异常

在实际使用中,我们可能用它做一些手势判断等等操作,但是有时候ACTION_DOWN被调用一次之后,就没有下文了。
这往往是因为你在重写的方法中,返回了false,这意味着你不消费事件,那么系统在把ACTION_DOWN事件传给你之后,收到你的不消费该事件的提醒之后,后续的事件就不传给你了。这里主要是在事件分发中做的控制。关于源码分析,有兴趣的同学,可以查看《Android开发艺术探索》。

RecycleView的删除错乱

问题主要处在notifyItemMoved(int position)这些新的api中,主要是因为

主要是告诉你,当adapter位置有变化的时候,使用getAdapterPosition()可以得到更新的变化,而onBindViewHolder()中的position并不会更新

上一篇下一篇

猜你喜欢

热点阅读