首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >getView()调用position 0而不是最后一个

getView()调用position 0而不是最后一个
EN

Stack Overflow用户
提问于 2016-01-09 14:34:43
回答 3查看 479关注 0票数 1

这是我的getView()

代码语言:javascript
复制
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;
}

从日志中,我发现了以下内容:

代码语言:javascript
复制
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(最后)位置。我应该在哪里换车?

EN

回答 3

Stack Overflow用户

发布于 2016-01-09 15:15:50

覆盖适配器类中的函数getCount()。并从那里返回messageModels.size(),看起来您可能会从那里返回(messageModels.size() - 1)。

代码语言:javascript
复制
@Override
public int getCount() {
    return messageModels.size();
}
票数 0
EN

Stack Overflow用户

发布于 2016-01-09 16:14:35

实际上,我布局中的这一行android:stackFromBottom="true"导致了这一问题。我删除了它,问题就解决了。

票数 0
EN

Stack Overflow用户

发布于 2018-12-18 20:31:21

在我的例子中,最后一项的返回位置为0:

代码语言:javascript
复制
@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;
}

将其更改为下面解决了问题:

代码语言:javascript
复制
@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条件检查中重置视图属性,例如:

代码语言:javascript
复制
if (fooModel.name != null) { yourView.setText(fooModel.name);  }
else { yourView.setText(''); } 
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34690510

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档