我正在尝试改善我们的列表视图渲染性能,并正在进行微调。(我们使用viewHolder,异步获取图像,在滚动时暂停图像显示,并已禁用滚动缓存)
现在,我正在检查布局,并发现单个列表项的布局设置如下,该布局在getView中被填充。
自定义列表适配器的getView()
if (convertView == null) {
convertView = inflater.inflate(R.layout.zzz_list_item, null);
...save stuff in holder etc.
zzz_list_item.xml
<LinearLayout
android:id="@+id/layout_success"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/base"
android:orientation="vertical"
android:paddingBottom="30dp" >
...many lines of a "success" item layout
</LinearLayout>
<LinearLayout
android:id="@+id/layout_failure"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:visibility="gone" >
...many lines for a failure item layout
</LinearLayout>
我们自定义的列表视图适配器中,可见性在getView方法中进一步控制。
getView()方法 - 每次执行
if(isSuccessfulItem){
((LinearLayout) convertView.findViewById(R.id.layout_failure)).setVisibility(View.GONE);
((LinearLayout) convertView.findViewById(R.id.layout_success)).setVisibility(View.VISIBLE);
} else {
((LinearLayout) convertView.findViewById(R.id.layout_failure)).setVisibility(View.VISIBLE);
((LinearLayout) convertView.findViewById(R.id.layout_success)).setVisibility(View.GONE);
}
尽管这可能会导致性能略有下降(getView很耗费资源),但我想知道是否将成功和失败元素的处理重构并拆分成两个不同的布局,然后使用
getViewTypeCount()
和getItemViewType(int position)
分别进行填充,是否更加合理。即使在填充时将其设置为visibility=GONE,列表项布局中额外的失败布局代码(因此增加了文件大小)是否会影响性能?
非常感谢您的任何见解。