1

アクティビティにカスタム 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 を使用せず、毎回レイアウトを膨らませると、問題なく表示されます。それを修正する方法はありますか?

4

2 に答える 2

0

別のリストビュー項目を表示するには、BaseAdapter のいくつかのメソッドをオーバーライドする必要があります。

@Override
public int getViewTypeCount() {
    return 2;
}

@Override
public int getItemViewType(int position) {
    if (changeable) {
        return 0;
    } else {
        return 1;
    }
}
于 2014-06-27T09:33:00.220 に答える
0

やった!それはほんの少しのばかげたエラーでした。

最初:私は変わりました

android:layout_width="fill_parent"

txtName に

android:layout_width="wrap_content"

これにより、テキスト幅の問題が解決されます。なぜ以前は機能しなかったのかわかりませんか?

そして2番目:

if (isImportant()) viewHolder.txtName.setTypeface(null, Typeface.BOLD);

if (isImportant()) {
    viewHolder.txtName.setTypeface(null, Typeface.BOLD);
} else {
    viewHolder.txtName.setTypeface(null, Typeface.NORMAL);
}

これにより、太字の問題が解決されます。(問題は質問には記載されていませんが、画面に表示されます。)

助けてくれてありがとう!

于 2014-06-27T10:06:09.677 に答える