我想在我的ListView上使用CursorAdapter實現一種交替行效果,那就是如此特定的行讓我們說數字數據我想使用blue.xml作爲其佈局而文本行我想用他們的佈局red.xml。我從Sqlite獲取數據,所以我認爲使用CursorAdapter可能會更好,但我想知道CursorAdapter是否具有顯着優化的實現,因爲它使用查詢中的遊標與使用BaseAdapter相比。所以我正在尋找一些幫助,爲不同類型的行獲得交替行效果:例如。從CursorAdapter充氣多個視圖
Text - red_row
Text - red_row
Numbers - blue_row
Text - red_row
Numbers - blue_row
Numers - blue_row
Text - red_row
@Override
public View newView(Context context, Cursor cursor, ViewGroup parent) {
View retView;
Holder holder = new Holder();
LayoutInflater inflater = LayoutInflater.from(context);
if(cursor.getString(cursor.getColumnIndex("from")).equals(myId)){
retView = inflater.inflate(R.layout.row_red, parent, false);
holder.message = (TextView) retView.findViewById(R.id.msg1);
holder.time = (TextView) retView.findViewById(R.id.msg2);
holder.viewType = 1;
}else{
retView = inflater.inflate(R.layout.row_blue, parent, false);
holder.message = (TextView) retView.findViewById(R.id.txt1);
holder.time = (TextView) retView.findViewById(R.id.txt1);
holder.viewType = 2;
}
retView.setTag(holder);
return retView;
}
@Override
public void bindView(View view, Context context, Cursor cursor) {
Holder holder = (Holder)view.getTag();
String message = cursor.getString(cursor.getColumnIndex("text"));
String time = cursor.getString(cursor.getColumnIndex("time"));
holder.message.setText(message);
holder.time.setText(time);
}
static class Holder{
TextView message;
TextView time;
int viewType;
}
我嘗試上面的代碼和它的工作對所有可見的行,但一旦數據被滾動的所有新填充的行顯示了錯誤的佈局和我已經研究SQLite中的數據與該行的ID我想成爲一個特定的佈局是正確的,不知道究竟是什麼原因導致了這種情況,但是我將其縮小到newView方法中的某些內容,或者查詢對於滾動速率來說太慢,導致錯誤的佈局被誇大。任何幫助表示讚賞。