我对android中的列表有一点问题。例如,我已经制作了一个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;
}
}
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;
}
}
答案 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对象,从不重新分配它。