0

我对 android 中的 Lists 有一点问题。例如,我制作了一个 android 应用程序。在这个应用程序中,我查询列表中的元素,但每次我使用 System.out.println 显示最后一个元素时都会得到它。

我的主要活动:

package djukic.tests.list;

import java.util.ArrayList;
import java.util.List;
import djukic.tests.list.TagData;
import android.os.Bundle;
import android.app.Activity;

public class MainActivity extends Activity {

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        returnTG();
    }

    public List<TagData> returnTG ()
    {
        List<TagData> list =new ArrayList<TagData>();
        TagData t1 = new TagData();
        TagData test = new TagData();

        for(int i=0; i <= 2 ; i++)
        {   
        t1.setName("Motor" + i);    
        list.add(t1);
        }

        System.out.println("list size = " + list.size());
        test = list.get(0);
        System.out.println("test.getName 2 = " + test.getName());
        test = list.get(1);
        System.out.println("test.getName 2 = " + test.getName());
        test = list.get(2);
        System.out.println("test.getName 2 = " + test.getName());
        return list;

    }
}

和我的 TAGDATA.JAVA:

package djukic.tests.list;


public class TagData 
{
    String name, last, tagID;
    int repetition, sollAmount, lastAmount;

    public TagData()
    {

    }

    public TagData(String name, int repetition, int sollAmount, int lastAmount, String last, String tagID)
    {
        this.name = name;
        this.repetition = repetition;
        this.sollAmount = sollAmount;
        this.lastAmount = lastAmount;
        this.last = last;
        this.tagID = tagID;
    }


    //get Methods
    public String getName()
    {
        return name;
    }

    public int getRepetition()
    {
        return repetition;
    }

    public int getsollAmount()
    {
        return sollAmount;
    }
    public int getlastAmount()
    {
        return lastAmount;
    }

    public String getlastDate()
    {
        return last;
    }

    public String getTagID()
    {
        return tagID;
    }


    //set Methods
    public void setName(String name)
    {
        this.name = name;
    }

    public void setRepetition(int repetition)
    {
        this.repetition = repetition;
    }

    public void setsollAmount(int sollAmount)
    {
        this.sollAmount = sollAmount;
    }
    public void setlastAmount(int letzteAmount)
    {
        this.lastAmount = letzteAmount;
    }

    public void setlastDate(String last)
    {
        this.last = last;
    }

    public void setTagID(String tagID)
    {
        this.tagID = tagID;
    }
}
4

3 回答 3

0

这实际上更像是一个 Java 问题。

您只需创建一个 TagData 对象,并且每次都将相同的对象添加到列表中。您正在修改这一对象的名称。

例如,您可以更改此:

List<TagData> list =new ArrayList<TagData>();
TagData t1 = new TagData();
TagData test = new TagData();

for(int i=0; i <= 2 ; i++)
{   
    t1.setName("Motor" + i);    
    list.add(t1);
}

对此:

List<TagData> list =new ArrayList<TagData>();

for(int i=0; i <= 2 ; i++)
{
    TagData t1 = new TagData();
    t1.setName("Motor" + i);    
    list.add(t1);
}

我建议您阅读 Java 对象和引用以及按值传递和按引用传递之间的区别。

于 2012-12-19T19:43:13.060 回答
0

怎么改

{   
   t1.setName("Motor" + i);    
    list.add(t1);
}

只是

    {
        list.add("Motor" + i);
    }
于 2012-12-19T19:44:26.130 回答
0
    List<TagData> list =new ArrayList<TagData>();
    TagData t1 = new TagData();
    TagData test = new TagData();

    for(int i=0; i <= 2 ; i++)
    {   
        t1.setName("Motor" + i);    
        list.add(t1);
    }

与其使用相同的对象并一遍又一遍地更改名称,不如在每次要向列表中添加一个对象时创建一个新对象。

for (int i = 0; i <= 2; i+)
{
    t1 = new TagData();
    t1.setName("Motor" + i);
    list.add(t1);
}

这样,每次迭代时 t1 都会指向一个新对象。您的示例只会一遍又一遍地重命名同一个 t1 对象,而不会重新分配它。

于 2012-12-19T19:52:08.177 回答