2015-10-20 68 views
1

我想用不同的佈局(2佈局)編寫ListView CursorAdapter。 我覆蓋了newViewbindView方法。在具有相同佈局的頁面中,它們工作正確,但是在具有混合應用程序崩潰的頁面中。 發生這種情況是因爲bindView目前收到list_item_depart類型的視圖,此時必須接收list_item_person。 (第2次膨脹list_item_depart和所有的罰款,但三要素是list_item_person和應用程序崩潰Android光標適配器不同的佈局

我的代碼:

@Override 
public View newView(Context context, Cursor cursor, ViewGroup parent) { 
    View view; 
    ViewHolder holder = new ViewHolder(); 
    if (getItemViewType(cursor) == ContactsDatabaseHelper.TYPE_DEPARTMENT) { 
     view = mInflater.inflate(R.layout.list_item_depart, parent, false); 
     holder.tvTitle = (TextView) view.findViewById(R.id.tvTitle); 
     holder.ivFolder = (ImageView) view.findViewById(R.id.ivFolder); 
    } else { 
     view = mInflater.inflate(R.layout.list_item_person, parent, false); 
     holder.tvName = (TextView) view.findViewById(R.id.tvName); 
     holder.tvPost = (TextView) view.findViewById(R.id.tvPost); 
    } 
    view.setTag(holder); 
    return view; 
} 

@Override 
public void bindView(View view, Context context, Cursor cursor) { 
    ViewHolder holder = (ViewHolder) view.getTag(); 
    if (getItemViewType(cursor) == ContactsDatabaseHelper.TYPE_DEPARTMENT) { 
     int id = cursor.getInt(cursor.getColumnIndex(ContactsDatabaseHelper.DEPART_ID)); 
     // Department title 
     holder.tvTitle.setText(cursor.getString(cursor.getColumnIndex(ContactsDatabaseHelper.DEPART_NAME))); 
     // Folder icon 
     if (ch.getChildDepartsCountById(id) > 0) { 
      holder.ivFolder.setVisibility(View.VISIBLE); 
     } else { 
      holder.ivFolder.setVisibility(View.GONE); 
     } 
    } else { 
     // Worker name 
     holder.tvName.setText(cursor.getString(cursor.getColumnIndex(ContactsDatabaseHelper.EMPLOYEE_NAME))); 
     // Worker post 
     holder.tvPost.setText(cursor.getString(cursor.getColumnIndex(ContactsDatabaseHelper.EMPLOYEE_TITLE))); 
    } 
} 

請幫忙,對不起我的英語(感謝谷歌翻譯)

+0

您可以幫助類似的問題類型 http://stackoverflow.com/questions/8479833/cursoradapter-with-different-row-layouts – bond007

回答

0

我不完全理解爲什麼會發生這種情況,但是當我改變覆蓋的方法 getViewTypeCount()return 2return 3它工作正常