AndroidのMMSおよびSMSデータベースに基づくカスタムカーソルアダプターがあります。コードは次のようになります。
@Override
public View newView(Context context, Cursor cursor, ViewGroup parent) {
Message m = Message.getMessage(context, cursor); // gets message from cursor
int t = m.getType(); // this gets the type of message it is .. 2 = recv, 1 = sent
switch(t){
case Message.MMS_IN: // 128
return mInflater.inflate(R.layout.messagelist_item_recv, parent, false);
case Message.MMS_OUT: // 132
return mInflater.inflate(R.layout.messagelist_item_sent, parent, false);
case Message.SMS_IN: // 2
return mInflater.inflate(R.layout.messagelist_item_recv, parent, false);
case Message.SMS_OUT: // 1
return mInflater.inflate(R.layout.messagelist_item_sent, parent, false);
default:
return null;
}
}
はR.layout.messagelist_item_sent
送信済みメッセージ用で、R.layout.messagelist_item_recv
は受信済みメッセージ用です。しかし、私のメッセージを見ると、リストビューが正しく表示されたときに最初に表示される行ですが、リストビューを新しいビューに移動すると、レイアウトが混同されます。recvレイアウトは、送信されたレイアウトがあるはずの場所であり、その逆も同様です。なぜこの種の問題が発生するのか誰もが知っていますか?
* 編集 **
@Override
public int getItemViewType(int position) {
// move the cursor to the position
Cursor c = (Cursor)getItem(position);
Message m = Message.getMessage(context, c);
if (isInbox(m.getType())){
inflater.inflate(recv view);
// it's been shortened
} else {
inflater.inflate(send view);
// and determine the correct type of row layout
// return 0 or 1
// use the code that you currently have from the newView method
}