나는 안드로이드 프로젝트에서 일하고있다. 내 활동 중 하나에는 내부 클래스 ChatHistoryAdapter가 있습니다. 활동이 시작되면 목록이 올바르게 표시되지만 스크롤 한 후 일부 항목이 복제됩니다. 솔루션을 검색했지만 거의 모든 솔루션은 setTag() 또는 Inflater에 대한 것이 었습니다.안드로이드리스트 스크롤에 반복되는 아이템보기
private void loadMessages() {
this.messages = new ArrayList<Message>();
Runnable r = new Runnable() {
@Override
public void run() {
messages = dbMes.gettMessages(guest.getId()); // gettMessages is Synchronized
chatHistoryAdapter = new ChatHistoryAdapter(getLayoutInflater());
listView.setAdapter(chatHistoryAdapter);
}
};
Thread T = new Thread(r);
T.start();
}
: 문제는 여기에 ... 여기
private class ChatHistoryAdapter extends BaseAdapter {
private LayoutInflater inflater;
public ChatHistoryAdapter(LayoutInflater inflater) {
this.inflater = inflater;
}
public void newOne() {
notifyDataSetChanged();
}
@Override
public int getCount() {
return messages.size();
}
@Override
public Object getItem(int i) {
return messages.get(i);
}
@Override
public long getItemId(int i) {
return i;
}
@Override
public View getView(int position, View myView, ViewGroup vg) {
MessageHolder messageHolder;
if (myView == null){
myView = this.inflater.inflate(R.layout.chat_list_item, null, false);
messageHolder = new MessageHolder();
messageHolder.hisTxt = (TextView)myView.findViewById(R.id.hisText);
messageHolder.myTxt = (TextView)myView.findViewById(R.id.myText);
myView.setTag(messageHolder);
} else {
messageHolder = (MessageHolder) myView.getTag();
}
Message mes = messages.get(position);
if (mes.myMessage()){
messageHolder.myTxt.setText(mes.toString());
} else{
messageHolder.hisTxt.setText(mes.toString());
}
return myView;
}
}
private static class MessageHolder{
TextView hisTxt;
TextView myTxt;
}
는 ArrayList를이 가득 부분 뭐죠 내 코드가 그들과 함께 괜찮다는 생각 .. 그래서 난 정말 이해 두지
목록에 중복 된 항목이 포함되어 있습니까? 또는 그들을 만들려면 listview 무엇입니까? 목록의 요소를 확인하십시오. –