我有一个ListFragment
,其中包含使用自定义Earthquake
填充的ArrayAdapter
个对象的列表。每个元素都是“突出显示”或不是,取决于地震的幅度是否高于某个值。问题是滚动后,“突出显示的”行颜色将应用于其他行。我怀疑这与ListView
中使用的缓存有关。我怎样才能防止这种情况发生?
以下是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
窗口小部件上观看了this视频,我正在考虑做最后亚当鲍威尔建议的事情 - 动态填充&amp;在LinearLayout
内展开ScrollView
并简单地使用它。我的数据目前限制在0到30个项目之间(我还没有测试过这个,所以不知道性能差异可能是什么)。但是,这些界限可能并不总是保持不变 - 所以我想解决这个问题,如果可以的话。
答案 0 :(得分:2)
如果通过突出显示您的意思是在幅度TextView
上设置颜色,那么如果幅度不是必需的,您只需要还原任何更改:
if (quake.getRoundedMagnitude() >= mMinHighlight) {
itemView.setTextColor(Color.RED);
} else {
itemView.setTextColor(/*the default color*/);
}