如何在android中成功使用列表?

时间:2012-12-19 19:37:00

标签: android

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

MY MAIN_ACTIVITY:

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;
    }
}

3 个答案:

答案 0 :(得分: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对象和引用以及传递值和传递引用之间的区别。

答案 1 :(得分:0)

如何改变

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

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

答案 2 :(得分: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对象,从不重新分配它。