我对BaseAdapter有一个简单列表视图的问题。 我想在getView方法中使用holder来在列表视图中获得更好的性能。 但是当我使用支架时,物品会混淆。列表视图中的项目数量是正确的,但顺序错误。 提前致谢。 这是我在getView中的代码:
ChatRowView holder;
ChatActivity.chatObject currentChatObject = getItem(position);
if(convertView == null)
{
holder = new ChatRowView();
convertView = LayoutInflater.from(parent.getContext()).inflate(R.layout.chat_row, null);
holder.chatComponent = new ChatComponent(mContext, currentChatObject.isLeft, currentChatObject.extraType, currentChatObject.message);
holder.chatComponent.tvName.setText(currentChatObject.name);
holder.chatComponent.tvTime.setText(currentChatObject.time);
load("some picture", holder.chatComponent.ivUser);
if(currentChatObject.extraType != ExtraContentView.eChatExtraContentType.NONE)
{
if(currentChatObject.extraType != ExtraContentView.eChatExtraContentType.GAME)
{
App.loadImage(teamsBaseUrl + "132" + "_70x70.png", holder.chatComponent.extraContentView.ivTeamLogo);
}
else
{
App.loadImage(teamsBaseUrl + "132" + "_70x70.png", holder.chatComponent.extraContentView.ivHomeTeamLogo);
App.loadImage(teamsBaseUrl + "132" + "_70x70.png", holder.chatComponent.extraContentView.ivAwayTeamLogo);
}
}
((RelativeLayout)convertView).addView(holder.chatComponent);
convertView.setTag(holder);
extraButtonsListener(holder.chatComponent);
}
else
{
holder = (ChatRowView)convertView.getTag();
}
return convertView;
答案 0 :(得分:0)
你错过了viewHolder
模式的用法。出于效率原因,我们认为这是为了避免滚动时findViewById
操作。必须始终完成集合*操作。鉴于您的实现,您应该始终看到相同的值(第一个)
答案 1 :(得分:0)
仅使用getView回收视图,在这种情况下应重置属性。可以重用像TextView等Ui元素,但即使convertview不为null,也应该重置textview中的文本。尝试下面列出的更改
ChatRowView holder;
ChatActivity.chatObject currentChatObject = getItem(position);
if(convertView == null)
{
convertView = LayoutInflater.from(parent.getContext()).inflate(R.layout.chat_row, null);
}
holder = new ChatRowView();
holder.chatComponent = new ChatComponent(mContext, currentChatObject.isLeft, currentChatObject.extraType, currentChatObject.message);
holder.chatComponent.tvName.setText(currentChatObject.name);
holder.chatComponent.tvTime.setText(currentChatObject.time);
load("some picture", holder.chatComponent.ivUser);
if(currentChatObject.extraType != ExtraContentView.eChatExtraContentType.NONE)
{
if(currentChatObject.extraType != ExtraContentView.eChatExtraContentType.GAME)
{
App.loadImage(teamsBaseUrl + "132" + "_70x70.png", holder.chatComponent.extraContentView.ivTeamLogo);
}
else
{
App.loadImage(teamsBaseUrl + "132" + "_70x70.png", holder.chatComponent.extraContentView.ivHomeTeamLogo);
App.loadImage(teamsBaseUrl + "132" + "_70x70.png", holder.chatComponent.extraContentView.ivAwayTeamLogo);
}
}
((RelativeLayout)convertView).addView(holder.chatComponent);
convertView.setTag(holder);
extraButtonsListener(holder.chatComponent);
return convertView;