我的活动中有自定义 ListView,它使用 ConvertView 模式和 ViewHolder。一切正常,但有时项目中的文本会被截断。这在屏幕截图中清晰可见:
看起来它重用了旧视图并且不更新文本长度。这是适配器代码的一部分:
if (convertView == null) {
viewHolder = new ViewHolderItemBool();
LayoutInflater inflater = (LayoutInflater) context.getSystemService (Context.LAYOUT_INFLATER_SERVICE);
if (changeable) {
convertView = inflater.inflate(R.layout.sensor_bool_e, null, true);
} else {
convertView = inflater.inflate(R.layout.sensor_bool, null, true);
}
viewHolder.txtName = (TextView) convertView.findViewById(R.id.txtName);
viewHolder.txtDesc = (TextView) convertView.findViewById(R.id.txtDescript);
viewHolder.imgState = (ImageView) convertView.findViewById(R.id.img);
convertView.setTag(viewHolder);
} else {
viewHolder = (ViewHolderItemBool) convertView.getTag();
}
viewHolder.txtName.setText(name);
if (isImportant()) viewHolder.txtName.setTypeface(null, Typeface.BOLD);
//some code to change description field and picture
return convertView;
这是项目布局:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/sensor_bool"
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center_vertical"
android:background="@drawable/sensor_background"
android:longClickable="true">
<ImageView
android:id="@+id/img"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/circle_green"
android:padding="10dp"/>
<LinearLayout
android:orientation="vertical"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<TextView
android:id="@+id/txtName"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:textSize="@dimen/sensor_text_size"
android:singleLine="true"
android:textColor="@color/sensor_name_color"/>
<TextView
android:id="@+id/txtDescript"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:paddingStart="2dp"
android:textSize="@dimen/sensor_desc_size"
android:textColor="@android:color/secondary_text_light"/>
</LinearLayout>
</LinearLayout>
如果我每次都不使用 ConverView 并膨胀布局,它看起来还不错。有什么想法可以解决这个问题吗?