gpt4 book ai didi

java - Android ListView 滚动时重复项目

转载 作者:太空狗 更新时间:2023-10-29 15:41:39 26 4
gpt4 key购买 nike

我正在从事 Android 项目。我的一项 Activity 有内部类 ChatHistoryAdapter。 Activity 开始时,列表会正确显示,但滚动后,某些项目会重复。我已经搜索了解决方案,但几乎每个解决方案都是 setTag() 或 Inflater。我认为我的代码对他们没问题..所以我真的不明白这里的问题是什么......

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的部分:

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();
}

enter image description here

最佳答案

您正在使用 ViewHolder 模式,您需要“清理”以前的值。

像这样。

if (mes.myMessage()){

messageHolder.myTxt.setText(mes.toString());
messageHolder.hisTxt.setText("");

} else {

messageHolder.myTxt.setText("");
messageHolder.hisTxt.setText(mes.toString());
}

希望对您有所帮助。

关于java - Android ListView 滚动时重复项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23596039/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com