有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java Android,显示ArrayList中相同数据的ListView?

以下代码:

    int i = 0;
    for(Shift shift : mShifts){
        shifts[i] = shift + "";
        i++;
    }

    ArrayAdapter<String> adapter = new ArrayAdapter<String>(getListView().getContext(), 安卓.R.layout.simple_list_item_1, shifts);
    setListAdapter(adapter);

生成所有唯一的Shift对象的列表-看起来像

com.name.appname.Shift@529a4ecc
com.name.appname.Shift@529a5010
com.name.appname.Shift@529a5088
com.name.appname.Shift@529a5100
... ect ...

对于我创建的尽可能多的Shift对象。其中mShiftsShift对象的数组列表

但是,当我使用以下内容时:

    int i = 0;
    for(Shift shift : mShifts){
        shifts[i] = String.format("%d", shift.getEnd());
        i++;
    }

    ArrayAdapter<String> adapter = new ArrayAdapter<String>(getListView().getContext(), 安卓.R.layout.simple_list_item_1, shifts);
    setListAdapter(adapter);

当验证为唯一时,它将生成一个包含所有相同值的列表。唯一的变化是循环中的字符串赋值

相同的值是来自最近的Shift对象的所有时间戳

shift.getEnd()生成一个长值,它是事件发生时的时间戳(毫秒)。每个值都存储在一个数据库中,我已经验证(使用SQLite数据库浏览器)所有条目都是真正唯一的

编辑1

我通过以下方式从数据库分配mShifts

    ArrayList<Shift> mShifts = new ArrayList<Shift>();

    if(cursor.moveToFirst()){
        int i = 0;
        do{
            Shift shift = new Shift(getStringFromColumnName(cursor, ShiftsSQLiteHelper.COLUMN_SHIFT_NAME),
                    getStringFromColumnName(cursor, ShiftsSQLiteHelper.COLUMN_SHIFT_EMPLOYER),
                    getLongFromColumnName(cursor, ShiftsSQLiteHelper.COLUMN_SHIFT_START),
                    i);

            mShifts.add(shift);
            i++;
        }while(cursor.moveToNext());
    }

重要的是要注意,我已经用上面的变量i硬编码了end的值,这样我就可以肯定地知道,从DB读取数据不是一个错误。共有12个对象,无论出于何种原因,数组列表中的打印输出显示所有对象都具有end=11(最后一个对象的值)

问题不在于分配ArrayList,而在于显示它

编辑2

在调试器中查看mShiftsarrayList(分配列表时)显示,在每个循环中,数组列表中的所有值都设置为最近的值

因此,有问题的代码是赋值循环

轮班班班

public class Shift {
    private static String mName;
    private static String mEm;
    private static long mStart;
    private static long mEnd;

    public Shift(String name, String em, long start, long end) {
        setName(name);
        setEm(em);
        setStart(start);
        setEnd(end);
    }

    public static String getName() {
        return mName;
    }
    public static void setName(String name) {
        mName = name;
    }

    public static String getEm() {
        return mEm;
    }
    public static void setEm(String em) {
        mEm = em;
    }

    public static long getStart() {
        return mStart;
    }
    public static void setStart(long start) {
        mStart = start;
    }

    public static long getEnd() {
        return mEnd;
    }
    public static void setEnd(long end) {
        mEnd = end;
    }
}

如果您需要任何其他代码片段,请告诉我


共 (1) 个答案

  1. # 1 楼答案

    静态变量是类属性而不是对象属性,任何引用该变量的代码都引用完全相同的数据

    在您的情况下,将覆盖Shift属性的先前内容