2012-06-13 55 views
0

我在使用不同的項目列表項目時出現問題。Android ListView:光標適配器使用不正確的項目類型

這裏是我下面的代碼:

private class ChatAdapter extends CursorAdapter { 
    private LayoutInflater mInflater; 

    private static final int OWN_MESSAGE = 0; 
    private static final int INTERLOCUTOR_MESSAGE = 1; 

    public ChatAdapter(Context context, Cursor c) { 
     super(context, c, false); 
     mInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 

    } 

    @Override 
    public void bindView(View view, Context context, Cursor cursor) { 
     final TextView text = (TextView) view.findViewById(R.id.chat_message_text); 
     final String message = cursor.getString(MessagesQuery.MESSAGE_TEXT); 
     text.setText(message); 
    } 

    @Override 
    public View newView(Context context, Cursor cursor, ViewGroup group) { 

     View view = null; 
     final int sender_id = cursor.getInt(MessagesQuery.SENDER_ID); 
     final int messageType = getItemViewType(sender_id); 
     switch (messageType) { 
      case OWN_MESSAGE: 
       view = (View) mInflater.inflate(R.layout.list_item_message_own, null); 
       break; 
      case INTERLOCUTOR_MESSAGE: 
       view = (View) mInflater.inflate(R.layout.list_item_message_interlocutor, null); 
       break; 

     } 
     return view; 
    } 

    @Override 
    public int getItemViewType(int sender_id) { 
     return (sender_id == Prefs.getIntProperty(mContext, R.string.key_user_id)) ? OWN_MESSAGE 
       : INTERLOCUTOR_MESSAGE; 
    } 

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

} 

一切正常,直到我開始滾動。有時候數據推向錯誤的佈局的問題。我明白,這可能是因爲重複使用視圖的列表項。 但我不明白如何強制適配器在bindView()中使用正確的視圖? 也許這是不是很難理解,但我不能:-( 誰能告訴我哪裏是我的問題嗎?

PS對不起我不完美的英語。

回答

0

你這個方法錯誤的認知:

@Override 
public int getItemViewType(int sender_id /* it is position not sender id*/) 
{ 

} 

它不給你發sender_id相反,它是送你的位置0,1,2,3,等等

,你必須決定做什麼,當它是。位置0,1等等 上。

一招是你可以保存課程級別Cursor在你的構造函數中提供,然後獲取該特定位置上的數據並獲得sender_id完成剩餘步驟。

+0

你完全正確。我沒有正確理解getItemViewType()方法。謝謝你幫助我!現在一切正常。 – Infernus

相關問題