这是我的getView()
public View getView(final int position, View convertView, ViewGroup parent) {
Holder holder = null;
if (convertView == null) {
//MessageModel mm = messageModels.get(position);
if(!messageModels.get(position).isIncoming()){
convertView = LayoutInflater.from(context).inflate(R.layout.list_item_messages_outgoing, null);
}else {
convertView = LayoutInflater.from(context).inflate(R.layout.list_item_messages_incoming, null);
}
//only for debugging purpose
Log.i(tag, position+", id: "+messageModels.get(position).getId()+", isIncoming: "+
messageModels.get(position).isIncoming()+", msg: "+messageModels.get(position).getMessage());
holder = new Holder();
holder.tvMessage = (TextView) convertView.findViewById(R.id.tvMessage);
holder.tvTime = (TextView) convertView.findViewById(R.id.tvTime);
convertView.setTag(holder);
} else {
holder = (Holder)convertView.getTag();
}
holder.tvMessage.setText(messageModels.get(position).getMessage());
holder.tvTime.setText(messageModels.get(position).getTime());
return convertView;
}从日志中,我发现了以下内容:
0, id: 11, isIncoming: true, msg: hi
1, id: 14, isIncoming: false, msg: hmmm
0, id: 11, isIncoming: true, msg: hi也就是说,第一个索引在最后一个索引中重复。我尝试了更大的项目编号,它总是这样调用位置:0, 1, 2, 3, ... n-2, 0,所以我错过了n-1的th(最后)位置。我应该在哪里换车?
发布于 2016-01-09 15:15:50
覆盖适配器类中的函数getCount()。并从那里返回messageModels.size(),看起来您可能会从那里返回(messageModels.size() - 1)。
@Override
public int getCount() {
return messageModels.size();
}发布于 2016-01-09 16:14:35
实际上,我布局中的这一行android:stackFromBottom="true"导致了这一问题。我删除了它,问题就解决了。
发布于 2018-12-18 20:31:21
在我的例子中,最后一项的返回位置为0:
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View view = convertView;
if (convertView == null) {
view = View.inflate(getContext(), R.layout.foo_row, null);
fooModel = this.getItem(position);
//proceed with fooModel
}
return view;
}将其更改为下面解决了问题:
@Override
public View getView(int position, View convertView, ViewGroup parent) {
if (convertView == null) {
convertView = LayoutInflater.from(getContext()).inflate(R.layout.foo_row, parent, false);
}
fooModel = this.getItem(position);
//proceed with fooModel
return convertView;
}另外,不要忘记在if-else条件检查中重置视图属性,例如:
if (fooModel.name != null) { yourView.setText(fooModel.name); }
else { yourView.setText(''); } https://stackoverflow.com/questions/34690510
复制相似问题