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;
}
}
모든 것이 OK입니다 :
여기 아래에있는 내 코드입니다. 데이터가 잘못된 레이아웃으로 푸시되는 경우가 있습니다. 목록 항목을 보려면 Views를 재사용했을 가능성이 높습니다. 하지만 bindView()에서 올바른보기를 사용하도록 어댑터를 강제하는 방법을 이해하지 못합니까? 은 아마이 매우 이해하기 어려운 일이 아니다,하지만 내 문제가 어디 :-( 사람은 말해 줄 수 없다?PS 나의 불완전한 영어에 대한 죄송합니다.
완전히 수정했습니다. 정확하게 getItemViewType() 메소드를 이해하지 못했습니다. 도와 주셔서 감사합니다! 이제 모든 것이 괜찮습니다. – Infernus