首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Android未排序列表

问Android未排序列表
EN

Stack Overflow用户
提问于 2010-07-15 19:49:37
回答 1查看 280关注 0票数 1

我已经用我自己的ListAdapter创建了一个listActivity。问题是,列表一旦启动,就会按顺序查看。但是当我向下滚动,或者从另一个活动返回时,listView完全乱了顺序。

我原以为问题出在ArrayList中,但事实并非如此,这个列表是经过排序的,我确信这一点,因为当我循环遍历ArrayList中的所有元素时,它们在日志中的打印方式与我插入它们的方式相同。

我粘贴了下面的适配器代码,以防有人想要检查它。

代码语言:javascript
复制
package com.anubis.mail;

import java.util.ArrayList;

import android.content.Context;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.LinearLayout;
import android.widget.TextView;


public class EmailAdapter extends BaseAdapter {

    private ArrayList<EmailModel> elements;
    private Context c;

    public EmailAdapter(Context c, ArrayList<EmailModel> Emails) {

        this.elements = Emails;
        this.c = c;
    }
    public int getCount() {
        return elements.size();
    }

    public Object getItem(int position) {
        return elements.get(position);
    }

    public long getItemId(int id) {
        return id;
    }

    public void Remove(int id) {
        notifyDataSetChanged();
    }

    public void Add(EmailModel email) {

        this.elements.add(email);

        for (EmailModel e : elements){

            Log.v("EmailAdapter", e.getSubject());  
        }

        notifyDataSetChanged();
    }

    public View getView(int position, View convertView, ViewGroup parent) {

        LinearLayout rowLayout;
        EmailModel email = elements.get(position);

        if (convertView == null) {

            rowLayout = (LinearLayout) LayoutInflater.from(c).inflate (R.layout.inbox_item, parent, false); 

            TextView subject_textview = (TextView)rowLayout.findViewById(R.id.subject_textview);
            subject_textview.setText(email.getSubject());

            String body_hint = " - " + email.getBodyHint();

            TextView bodyhint_textview = (TextView)rowLayout.findViewById(R.id.body_hint_textview);
            bodyhint_textview.setText(body_hint);


            String sender_name = get_sender_name(email.getSender());

            TextView sender_name_textview = (TextView)rowLayout.findViewById(R.id.sender_textview);
            sender_name_textview.setText(sender_name);

            TextView date_time_textview = (TextView)rowLayout.findViewById(R.id.date_time_textview); 
            date_time_textview.setText(email.getTime());

        } else {
            rowLayout = (LinearLayout) convertView;
        }
        return rowLayout;
    }

    private String get_sender_name(String from) {

        String[] sender = from.split("<");
        String sender_name;

        try {
            sender_name = sender[0];
        } catch (Exception e) {
            sender_name = sender[1];
        }
        return sender_name;
    }
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2010-07-15 20:46:48

您需要在IF之后移动代码。

代码语言:javascript
复制
if (convertView == null) {
        rowLayout = (LinearLayout) LayoutInflater.from(c).inflate (R.layout.inbox_item, parent, false); 
} else {
        rowLayout = (LinearLayout) convertView;
}
TextView subject_textview = (TextView)rowLayout.findViewById(R.id.subject_textview);
subject_textview.setText(email.getSubject());

String body_hint = " - " + email.getBodyHint();

TextView bodyhint_textview = (TextView)rowLayout.findViewById(R.id.body_hint_textview);
bodyhint_textview.setText(body_hint);


String sender_name = get_sender_name(email.getSender());

TextView sender_name_textview = (TextView)rowLayout.findViewById(R.id.sender_textview);
sender_name_textview.setText(sender_name);

TextView date_time_textview = (TextView)rowLayout.findViewById(R.id.date_time_textview); 
date_time_textview.setText(email.getTime());
return rowLayout;
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3255226

复制
相关文章

相似问题

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