技能点整理—2

1.itemtouch方法和listview的条目点击的区别 :

onTouchevent方法,应该都是用在自定义控件中的,onTouchevent 方法中有三种态;ACTION_DOWN,ACTION_MOVE,ACTION_UP;

Listview除了有条目点击监听还有界面滑动监听OnScrollListener,里面有两个方法onScrollStateChanged(当滑动状态发生改变的时候调用): 里面有三种状态:SCROLL_STATE_IDLE--空闲状态(滑动停止时执行一次)SCROLL_STATE_FLING--滚动状态(滚动过程中执行一次)SCROLL_STATE_TOUCH_SCROLL--惯性滑动状态中执行一次  onScroll:滚动时调用(滑动过程中会一直调用,刚加载listv的时候也会调用

而条目点击,就类似于我们自定义一个view,完成之后,需要暴露给外界一个接口一样,这个条目点击就是暴露出来给我们使用的接口

 

2.还有listview多层(2层以上)嵌套,会有什么问题

这样会导致放入的子view显示不全,默认情况下,谷歌是禁止listview多层嵌套的;解决方法:在设置完ListViewAdapter后,通过adapter.getCount方法进行for循环,在循环中获取子view,测量子view的高度,然后重新将高度相加重新计算ListView的高度,然后把高度再作为LayoutParams设置给ListView,这样它的高度就正确了

3.子线程的子线程里调用handler会有什么问题?

这个不知道,但可以回答:如果要在子线程创建handler需要注意:需要手动的创建Looper并开启轮询器Looper.prepare();//创建轮询器Looper.loop();//开启轮询器,之后才能new handler

 

扫描二维码关注公众号,回复: 1961794 查看本文章

4.viewPager中放置view和fragment的区别:

ViewPager 如其名所述,是负责翻页的一个 View。准确说是一个 ViewGroup,包含多个 View 页,在手指横向滑动屏幕时,其负责对 View 进行切换。为了生成这些 View 页,需要提供一个 PagerAdapter 来进行和数据绑定以及生成最终的 View 页。

本质上都是把View组装到一起Fragment因为有fragmentmanager,使用起来更为灵活,放置view需要写一个类,在这个类中通过view.inflate()来加载布局; 放置fragment,需要在fragment的onCreateview方法中加载布局

.extends pagerAdapter,主要实现的是一些简单的页面切换,比如说,在智慧北京的导航页面,轮播图就有用到,我们切换的是简单的图片ImageView

extends FragmentPagerAdapter,主要实现的是Fragment片段之间的切换,我们开发项目通常使用这方法构建框架,在智慧北京的MainActivity就涉及到,我们会准备很多功能模块的Fragment,然后使用setAdapter方法将各个Fragment装载进去,这样很好的实现了,Fragment侧滑页面的效果。

Fragment是一个片段,有属于它自己的生命周期,依赖Activity,可以理解为,Activity销毁了Fragment销毁,因为Fragment是一个小碎片,它可以在Activity创建销毁,并且多个片段可以在同个Activity上,我们为了省时省力,大部分都使用Fragment代替Activity

Fragment中嵌套Fragment时,一定要使用getChildFragmentManager();

否则,会在ViewPager中出现fragment不会加载的情况,即fragment出现空白页的情况!

 

 

5.PagerAdapter的notifyDataSetChanged失效问题

PagerAdapterinstantiateItem()方法中,使用setTag()为需要改变的view添加tag,当需要改变ViewPager内容时,只需要通过findViewByTag()方法找到对应的view,修改即可此方案更加灵活和高效。

6.部分图片上传失败,客户端怎么响应

上传失败,服务端肯定会返回失败信息,那么客户端可以显示上传失败的界面,提示是否重新上传,如果用户点击重新上传,则再次上传图片(同时上传多张图片,应该是把这些图片先放到一个集合中,遍历集合一个个上传)

 

7.listview的一些问题

重用converView 通过复用converview来减少不必要的view的创建,另外Infalte操作会把xml文件实例化成相应的View实例,属于IO操作,是耗时操作。

减少findViewById()操作 xml文件中的元素封装成viewholder静态类,通过converviewsetTaggetTag方法将view与相应的holder对象绑定在一起,避免不必要的findviewbyid操作

避免在 getView 方法中做耗时的操作: 例如加载本地 Image 需要载入内存以及解析 Bitmap ,都是比较耗时的操作,如果用户快速滑动listview,会因为getview逻辑过于复杂耗时而造成滑动卡顿现象。用户滑动时候不要加载图片设置滑动监听,待滑动完成(对应静止状态)再加载,可以使用这个第三方库glide

Item的布局层次结构尽量简单,避免布局太深或者不必要的重绘

使用 RecycleView 代替listview 每个item内容的变动,listview都需要去调用notifyDataSetChanged来更新全部的item,太浪费性能了。RecycleView可以实现当个item的局部刷新,并且引入了增加和删除的动态效果,在性能上和定制上都有很大的改善

记录点击的Itemposition,然后在更新过程中,不断的判断,该position是不是介于可见的Item之间,如果是,则更新,否者,不更新。 首先要寻找RecyclerView中可见的item的位置范围,该方法并不在RecyclerView中,而是LinearLayoutManager--layoutManager.findLastVisibleItemPosition();

layoutManager.findFirstVisibleItemPosition();

调用notifyItemChanged(position)即可

 

当然像加载图片的话也可以给imageview设置tag标签

ListView 中元素避免半透明 半透明绘制需要大量乘法计算,在滑动时不停重绘会造成大量的计算,在比较差的机子上会比较卡。 在设计上能不半透明就不不半透明。实在要弄就把在滑动的时候把半透明设置成不透明,滑动完再重新设置成半透明。

 

猜你喜欢

转载自blog.csdn.net/u013212407/article/details/52275987
今日推荐