我经历了教程和搜索,但我仍然无法理解,
getVIEw(int position, VIEw convertVIEw, VIEwGroup arg2)
扩展BaseAdapter在我的AndroID应用程序中创建自定义ListVIEw时,该方法有效.因此,我无法准确编辑自定义列表视图.
我需要知道这个方法何时调用以及参数的含义.
如果有人可以解释下面的方法很棒.谢谢
@OverrIDepublic VIEw getVIEw(int position, VIEw convertVIEw, VIEwGroup arg2){ VIEwHolder holder; LayoutInflater inflater = context.getLayoutInflater(); if (convertVIEw == null) { convertVIEw = inflater.inflate(R.layout.Listitem_row, null); holder = new VIEwHolder(); holder.txtVIEwTitle = (TextVIEw) convertVIEw.findVIEwByID(R.ID.textVIEw1); holder.txtVIEwDescription = (TextVIEw) convertVIEw.findVIEwByID(R.ID.textVIEw2); convertVIEw.setTag(holder); } else { holder = (VIEwHolder) convertVIEw.getTag(); } holder.txtVIEwTitle.setText(Title[position]); holder.txtVIEwDescription.setText(description[position]); return convertVIEw;}
解决方法:
getVIEw():如规范中所述,getVIEw方法显示指定位置的数据.因此,当你setAdapter并滚动ListVIEw时,将调用getVIEw方法.
您在此处复制的方法是EfficIEntAdapter的一部分,用于优化ListVIEw性能以及使用VIEwHolder模式的优化.
从规格复制:只有更多的解释
position:项目在我们想要的视图项的适配器数据集中的位置.
convertVIEw:如果可能的话,重用旧视图.注意:你应该检查一下
在使用之前,vIEw是非null且具有适当的类型.如果无法转换此视图以显示正确的数据,则此方法可以创建新视图.异构列表可以指定它们的视图类型数,以便此VIEw始终是正确的类型(请参阅getVIEwTypeCount()和getItemVIEwType(int)).
因此,在上面的方法中,当您执行以下 *** 作时,您将重用convertVIEw.
if (convertVIEw == null){ .... convertVIEw.setTag(holder); } else { holder = (VIEwHolder) convertVIEw.getTag(); }
通过做以下事情,你避免查找(findVIEwByID),这就是VIEwHolder模式的好处
holder.txtVIEwTitle = (TextVIEw) convertVIEw.findVIEwByID(R.ID.textVIEw1);
parent:此视图最终将附加到的父级
编辑
问题:调用getVIEw的次数以及创建的convertVIEw数量是多少?
答:让我们举一个Efficeint Adapter from ApiDemos的例子.如果你的屏幕显示10行,那么,
convertVIEw计数:10 1 = 11(10行你在屏幕上看到的,一个额外的显示滚动效果).这意味着if(convertVIEw == null){…}块中的语句只会被调用11次.
getVIEw Count:最初计数将为10,但是当你开始滚动计数时继续增加.每次都调用getVIEw来更新数据.
注意:这仅适用于所提到的getVIEw方法.
总结以上是内存溢出为你收集整理的java – Android自定义列表视图全部内容,希望文章能够帮你解决java – Android自定义列表视图所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)