我正在尝试提高我们的列表视图渲染性能并正在研究微调。(我们使用 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?
任何见解将不胜感激,谢谢。