【发布时间】:2014-06-27 08:57:56
【问题描述】:
我的活动中有自定义 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 并在每次看起来都很好的时候膨胀布局。 有任何解决方法的想法吗?
【问题讨论】:
-
您的声明是否可以更改为静态?
-
试试
convertView = inflater.inflate(R.layout.sensor_bool_e, parent, false);而不是convertView = inflater.inflate(R.layout.sensor_bool_e, null, true); -
@RanjitPati 不,但即使我删除这部分代码并仅使用一种布局,问题仍然存在
-
@shayanpourvatan 它崩溃并出现异常 UnsupportedOperationException: addView(View, LayoutParams) is not supported in AdapterView
-
我已将 txtName 中的 android:layout_width="fill_parent" 更改为 android:layout_width="wrap_content",现在文本显示正常。但普通/粗体文本仍会不时更改。
标签: android listview convertview