我刚刚在我的Galaxy Nexus上升级了Android 4.2,ListView似乎比以前的4.1慢。这个bindView方法在4.1上非常快,在新的4.2上我看到了小故障。我曾尝试在AndroidManifest.xml
中明确启用硬件加速,但它没有多大帮助。人物(联系人)应用程序在4.2上完美运行,我想这也是由扩展android.support.v4.widget.CursorAdapter
实现的。我还尝试更改android.support.v4.widget.CursorAdapter
android.widget.CursorAdapter
而没有明显改善。
@Override
public void bindView(View view, Context context, Cursor cursor) {
final ViewHolder holder = (ViewHolder) view.getTag();
holder.nameView.setText(cursor.getString(mStreetColumnIndex));
holder.townView.setText(cursor.getString(mTownColumnIndex));
if (mDistanceColumn != null) {
float distance = cursor.getFloat(mDistanceColumn);
String distanceUnit;
if (distance >= 1000) {
distance /= 1000;
distanceUnit = " km";
} else {
distanceUnit = " m";
}
String decimalString = mDecimalFormat.format(distance);
holder.distanceView.setText(decimalString + distanceUnit);
holder.distanceView.setVisibility(View.VISIBLE);
} else {
holder.distanceView.setVisibility(View.GONE);
}
// read only brand first letter to be faster
cursor.copyStringToBuffer(mBrandColumnIndex, mBuffer);
if (mBuffer.sizeCopied > 0) {
if (mBuffer.data[0] == 'a') {
holder.logoImgView.setImageResource(R.drawable.agip);
} else {
holder.logoImgView.setImageResource(R.drawable.papoil);
}
} else {
holder.logoImgView.setVisibility(View.INVISIBLE);
}
}
编辑:添加了行布局
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:minHeight="@dimen/row_height"
android:background="@drawable/bg_list_selector"
android:layout_marginRight="@dimen/screen_padding"
android:layout_marginLeft="@dimen/screen_padding"
android:paddingLeft="@dimen/screen_padding">
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:layout_alignParentLeft="true"
android:layout_marginRight="@dimen/screen_padding"
android:layout_toLeftOf="@+id/txtDistance"
android:orientation="vertical"
>
<TextView
android:id="@+id/txtName"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="@dimen/list_text_primary_size"
android:textStyle="bold"
/>
<TextView
android:id="@+id/txtTown"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="@dimen/list_text_primary_size"
/>
</LinearLayout>
<TextView
android:id="@+id/txtDistance"
android:layout_toLeftOf="@+id/imgLogo"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:textColor="@color/grey_dark"
android:textSize="13sp"
android:textStyle="bold"
android:layout_marginRight="@dimen/screen_padding"/>
<ImageView
android:id="@+id/imgLogo"
android:layout_alignParentRight="true"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/agip"
android:background="@color/grey_dark"
/>
</RelativeLayout>
编辑2: 这是traceview http://goo.gl/UmS3w 这是使用http://goo.gl/Yoe1u
制作的答案 0 :(得分:1)
它是由太多复杂的windowBackground引起的,它是:
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/bg_repeat">
</item>
<item>
<shape>
<gradient android:startColor="#0affffff" android:endColor="#0a000000"
android:type="radial" android:gradientRadius="500"/>
</shape>
</item>
<item>
<shape>
<gradient android:startColor="#1effffff" android:endColor="#1e000000"
android:type="linear" android:angle="270"/>
</shape>
</item>
</layer-list>
和bg_repeat.xml:
<?xml version="1.0" encoding="utf-8"?>
<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
android:src="@drawable/bg"
android:tileMode="repeat"/>
谢谢大家的帮助!