android笔记

android 学习至今的笔记,不定期更新吧。都是自己感悟的,应该比较有用。有错误麻烦指出。


14.2.27


手指触摸屏幕时,从父层级传递到子层级。顺序如下(假设层级为Activity-ViewGroup-View):

Activity.dispatchTouchEvent() : 调用window的根view的dispatchTouchEvent()

ViewGroup.dispatchTouchEvent() : 先调用ViewGroup.onInterceptTouchEvent()判断是否拦截,不拦截则调用相应位置的子View.dispatchTouchEvent()

ViewGroup.onInterceptTouchEvent() : true-->ViewGroup.onTouchEvent()  false-->向下传递

View.dispatchTouchEvent(): 优先传递给OnTouchListener,没有的话传递给View.onTouchEvent()

View.onTouchEvent(): 返回true表示消费掉了,否则向上传递onTouchEvent

ViewGroup.onTouchEvent(): 同上

Activity.onTouchEvent(): 同上

通常来说。我们不需要重写dispatchTouchEvent()


对于底层的View来说,有一种方法可以阻止父层的View截获touch事件,就是调用getParent().requestDisallowInterceptTouchEvent(true);方法。一旦底层View收到touch的action后调用这个方法那么父层View就不会再调用onInterceptTouchEvent了,也无法截获以后的action。


14.2.28
嵌套Fragment的时候,比如SlidingMenu控制的每一个Fragment中添加用Fragment组成的ViewPager:
对于其使用的FragmentManager,如果是顶层Fragment,那么调用FragmentManager的时候,应该这样写getActivity().getSupportFragmentManager(),如果是嵌套的Fragment,那么应该写getChildFragmentManager()


14.3.18
对于ListView的自定义Item,有时会出现设置的OnItemClickListener无法响应的情况。原因主要是焦点问题。解决方法只需在Item的根节点加入 android:descendantFocusability="blocksDescendants" 即可。


14.3.21
使用SharedPreference多进程数据共享出错问题:
首先要将获取SharedPreference的MODE设置为: MODE_MULTI_PROCESS 。
其次为了保证修改数据实时提交到磁盘,不要将SharedPreference设置成成员变量,尽量在哪里修改就在哪里直接获取SharedPreference,修改后别忘记commit。


14.3.26
sqlite子增长列的第一项为1


14.5.5
解决listview的各项显示错位的问题:
根本原因在于convertView的使用,由于if (null == convertView) 的判断, 导致缓存中的可能会留给新加载的view
解决方法,重写函数:
getViewTypeCount()就是获取列表有几种布局类型,getItemViewType(int position)是获取在position位置上的布局类型。


14.7.23
对于android4.3+系统通知栏显示:“***”正在运行  的原因:
Service.startForeground()这句话的作用。


14.8.11
其实很早就写在代码里了但是一直没没有写在笔记里
更新Listview一般使用adapter的notifyDataSetChanged。这里需要注意:
adapter在初始化时传递的data引用,只有对该引用的数据进行修改才能正确的使listview更新数据
一切更新和修改都需要在原数据源上进行,一切给data赋值的语句都是改变引用,导致无法正确更新数据
所以正确的更新方法,要先data.clear();而不是data=new ArrayList<***>();


还有一个AsyncTask的使用方法,我们在应用中执行AsyncTask最好使用executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR,*****);防止多线程阻塞


15.5.13

整理一下android.support.v4.widget 常用的控件吧:

ViewPager

PagerTabStrip(其实不是widget下的,viewpager的滑动indicator)

DrawerLayout

SwipeRefreshLayout (下拉刷新效果可能和常见的不同)

如果要自己实现拖动效果,可以考虑ViewDragHelper,或者SlidingPaneLayout


FragmentTransaction可以将layout里的Framelayout替换成Fragment对象


15.5.27

使用Animation做动画的时候要注意:即使设置了setfillafter(true)改变了view的位置/大小,view的实际属性并没有改变。

如果希望动画结束后能改变属性,应该使用ValueAnimator(ObjectAnimator)。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值