【发布时间】:2013-05-09 03:04:50
【问题描述】:
我正在尝试提高我们的列表视图渲染性能并正在研究微调。 (我们使用 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 很昂贵),但我想知道是否有必要将成功和失败元素的处理重构并拆分为两个不同的布局,然后分别使用 @987654324 进行膨胀@ 和getItemViewType(int position)。
我的列表项布局的额外失败布局代码(并因此增加了文件大小)是否会影响性能,即使它在膨胀期间设置为 visibility=GONE?
任何见解将不胜感激,谢谢。
【问题讨论】:
标签: android performance android-layout android-listview