扫二维码与项目经理沟通
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流
这篇文章主要介绍“ListView中Item View的优化方法有哪些”,在日常操作中,相信很多人在ListView中Item View的优化方法有哪些问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”ListView中Item View的优化方法有哪些”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!
成都创新互联公司拥有网站维护技术和项目管理团队,建立的售前、实施和售后服务体系,为客户提供定制化的网站设计制作、网站建设、网站维护、托管服务器解决方案。为客户网站安全和日常运维提供整体管家式外包优质服务。我们的网站维护服务覆盖集团企业、上市公司、外企网站、商城网站建设、政府网站等各类型客户群体,为全球近1000家企业提供全方位网站维护、服务器维护解决方案。
对于ListView 的优化,网上已经被讲解过很多,ListView的优化一般优化如下几点:
(1)Item View重用优化(防内存溢出)
(2)View查找优化(减少执行时间)
(3)滑动优化,在滑动的时候加载图片数据等(防滑动卡顿)
以上基本上是对应单ItemView进行的优化,对于多种ItemView的优化一般使用BaseAdapter给
提供的两个方法
getItemViewType():返回View类型,默认返回0
getViewTypeCount(): 返回有多少种类型的itemView,默认返回1
只有一种类型item view的话,是不需要重写这两个方法的。
如果有多个的时候,就需要重写这个方法了,并且返回的必须满足一下要求:
(1)getItemViewType()返回值必须大于等于0,并且小于类型的个数。为什么是这个范围,是因为
在ListView里有一个数据,用来缓存已经使用过的Item View,详细信息自己看源码
(2)getViewTypeCount()这个方法的返回值就是你可能遇到的Item view类型的***个数,ListView会根据这个返回值
去创建缓存数组
如果有两种View类型的话,直接在Adapter里面重写getView()方法就可以了,根据getItemViewType()返回值创建相应的View既可。
但是,如果有六个,七个怎么办?那么Adapter的getView()方法得写多少代码,到时候维护起来会多么麻烦,自己看自己写的还好,
如果换做别人呢?非常非常的痛苦.....
我在做我们的app的时候,就遇到了这样的问题,订单列表,每种订单所对应的Item View会有很大的区别,操作起来极为不方便,如有小的
改动都会耽误很长时间。新增类型也不好处理。
我针对遇到的问题进行了一个点点的优化,可以能不是***秀的,但是至少能解决以上问题,如果您能有更好的方式,也欢迎交流。
设计:
使用提供者的设计方式提供每种Item View,不同的ItemView会有不同的提供者,提供者需要实现一个接口:
public interface IViewProvider { public abstract View getItemView(View convertView, LayoutInflater inflater, Object data); }
提供者只需要实现此接口,然后实现getItemView()方法,实现方式和Adapter的getView()的方式完全一样,减少了学习成本。
我还继承BaseAdapter专门实现了一个Adapter,名字叫MiltilViewListAdapter.java,实现了前面说的两个方法,和getView()方法
提供者只需要配置给MiltilViewListAdapter的实例即可。
一般情况下,都要传递给Adapter一个Bean集合,我的设计是,让这里面的bean都实现一个接口,用来标示它对应的哪个提供者。
使用方法:
[mw_shl_code=java,true]private ListView mListView; private ListmList = new ArrayList (); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); createData(); mListView = (ListView) findViewById(R.id.my_listview); //不同之处在于多了一个provider集合,提供所有期望显示类型的provider class //getView的实现在provider中实现,和在adapter中用法一样 List > providers = new ArrayList >(); providers.add(FlightOrderViewProvider.class); providers.add(SticketOrderViewProvider.class); MiltilViewListAdapter adpater = new MiltilViewListAdapter(getApplication(), mList, providers); mListView.setAdapter(adpater); }[/mw_shl_code]
到此,关于“ListView中Item View的优化方法有哪些”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注创新互联网站,小编会继续努力为大家带来更多实用的文章!
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流