1

カスタムを使用して入力するオブジェクトListFragmentのリストを含むがあります。地震のマグニチュードが特定の値を超えているかどうかに応じて、各要素が「強調表示」されるかどうかが決まります。問題は、スクロール後に「強調表示された」行の色が他の行に適用されることです。これは、で使用されているキャッシュに関係していると思われます。どうすればこれを防ぐことができますか?EarthquakeArrayAdapterListView

これが私のクラスのgetViewメソッドです:EarthquakeArrayAdapter

public View getView(int position, View convertView, ViewGroup parent) {
    if (convertView == null) {
        convertView = mInflater.inflate(R.layout.row, parent, false);
    }

    Earthquake quake = mQuakes.get(position);
    if (quake != null) {
        TextView itemView = (TextView) convertView.findViewById(R.id.magnitude);
        if (itemView != null) {
            itemView.setText(quake.getFormattedMagnitude());
            if (quake.getRoundedMagnitude() >= mMinHighlight)
                itemView.setTextColor(Color.RED);
        }
    // Set other views in the layout, no problems here...
    }
    return convertView;
}

そして、ここに私のrow.xmlレイアウトファイルがあります:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="horizontal" >

    <TextView
       android:id="@+id/magnitude"
       style="@style/ListFont.Magnitude" />

    <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical" >
        <TextView
            android:id="@+id/date"
            style="@style/ListFont.NonMagnitude"
            android:gravity="center_horizontal|top"
            android:textSize="18sp" />
        <TextView
            android:id="@+id/location"
            style="@style/ListFont.NonMagnitude"
            android:gravity="center_horizontal|bottom"
            android:textSize="14sp" />
    </LinearLayout>

</LinearLayout>

私はウィジェットでこのビデオを見てきましたがListView、Adam Powell が最後に提案していることを実行することを検討していLinearLayoutますScrollView。現在、私のデータは 0 ~ 30 項目に制限されています (これはまだテストしていないため、パフォーマンスの違いがどうなるかはわかりません)。ただし、これらの境界は常に同じであるとは限らないため、可能であればこれを解決したいと考えています。

4

1 に答える 1

2

ハイライトによってマグニチュードに色を設定することを意味TextViewする場合、マグニチュードが必要なものでない場合は、変更を元に戻す必要があります。

if (quake.getRoundedMagnitude() >= mMinHighlight) {
     itemView.setTextColor(Color.RED);
} else {
     itemView.setTextColor(/*the default color*/);
} 
于 2012-08-19T06:30:55.717 に答える