0
데이터베이스에서 내 listview에 데이터를 읽고 있는데 목록보기의 정보를 볼 수 있습니다. 각 행의 데이터는 왼쪽과 오른쪽으로 나뉩니다. 목록보기에서 스크롤 할 때 항목이 올바르게 uppdating되지 않습니다. 목록보기에서 오른쪽에있는 일부 항목은 왼쪽으로 이동하고 다른 방향으로 이동합니다. 아주 나쁜 해결책 인 getView() 바로 아래에 convertView = null을 설정하여이 문제를 해결할 수 있습니다! 문제를 올바르게 해결하는 방법?안드로이드,보기 소유자가 목록보기를 올바르게 업데이트하지 않습니다.
코드 링크 :
XML을 "http://pastebin.com/rCbeBS6E"
ChatFragment "http://pastebin.com/xMFCm62s"
public class ChatAdapter extends ArrayAdapter<Message> {
private ArrayList<Message> lstMessages;
private LayoutInflater layoutInflater;
public ChatAdapter(Context context, ArrayList<Message> messages) {
super(context, 0, messages);
this.lstMessages = messages;
layoutInflater = LayoutInflater.from(getContext());
}
public int IsMsgFromMe(Message message) {
boolean isSenderMe = ChatFragment.username.equals(message.GetFrom());
if (isSenderMe) {
return 0;
}
return 1;
}
@Override
public Message getItem(int position) {
return lstMessages.get(position);
}
@Override
public int getCount() {
return lstMessages.size();
}
//Number of layouts
@Override
public int getViewTypeCount() {
return 1;
}
@Override
public int getItemViewType(int position) {
Message message = lstMessages.get(position);
int sender = IsMsgFromMe(message);
return sender;
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder = null;
//Warning very bas solution!!!!
convertView = null; //Make it possible to scroll without loading data over an already existing view.
int sender = getItemViewType(position);
if (convertView == null) {
holder = new ViewHolder();
//Check who has sent the message me or someone else...
switch(sender) {
case 0:
convertView = layoutInflater.inflate(R.layout.row_chat_me, parent, false);
holder.chatFrom = (TextView) convertView.findViewById(R.id.txt_message_me_from);
holder.chatMessage = (TextView) convertView.findViewById(R.id.txt_message_me_message);
holder.chatTime = (TextView) convertView.findViewById(R.id.txt_message_me_time);
break;
case 1:
convertView = layoutInflater.inflate(R.layout.row_chat_others, parent, false);
holder.chatFrom = (TextView) convertView.findViewById(R.id.txt_message_others_from);
holder.chatMessage = (TextView) convertView.findViewById(R.id.txt_message_others_message);
holder.chatTime = (TextView) convertView.findViewById(R.id.txt_message_others_time);
break;
}
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
// Get the data item for this position
Message message = lstMessages.get(position);
// Populate the data into the template view using the data object
holder.chatFrom.setText("From: " + message.GetFrom());
holder.chatMessage.setText(message.GetMsg());
holder.chatTime.setText("Date: " + message.GetTime());
// Return the completed view to render on screen
return convertView;
}
public static class ViewHolder {
public TextView chatFrom;
public TextView chatMessage;
public TextView chatTime;
}
}
고맙습니다. 이것은 수정 솔루션입니다. 나는 이전 문제를 디버깅 한 후에 값을 변경하는 것을 잊어 버렸다고 믿을 수 없다. 이런 종류의 문제로 시간을내어 주셔서 실례합니다. – user2407226
올바른 해결책이라고 생각한다면 대답으로 표시하십시오. – NinjaCoder
나는 충분한 평판이 없다;) – user2407226