我在我的活动中有自定义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并对布局进行充气。 有任何想法如何解决这个问题?
答案 0 :(得分:0)
您需要覆盖BaseAdapter的某些方法以显示不同的listview项目:
@Override
public int getViewTypeCount() {
return 2;
}
@Override
public int getItemViewType(int position) {
if (changeable) {
return 0;
} else {
return 1;
}
}
答案 1 :(得分:0)
我做到了!这只是几个愚蠢的错误。
第一: 我改变了
android:layout_width="fill_parent"
在txtName中
android:layout_width="wrap_content"
这解决了文本宽度的问题。我不明白为什么它以前不起作用?
第二名:
if (isImportant()) viewHolder.txtName.setTypeface(null, Typeface.BOLD);
到
if (isImportant()) {
viewHolder.txtName.setTypeface(null, Typeface.BOLD);
} else {
viewHolder.txtName.setTypeface(null, Typeface.NORMAL);
}
这解决了粗体文本的问题。 (问题不是在问题上描述,而是在屏幕上看到。)
向所有人寻求帮助!