在 ArrayAdapter 中将项目添加到我的 arrayList
Item being added to my arrayList in ArrayAdapter
我有一个名为 Submission 的项目的 userSubs 列表(我使用 dm.theUser.getAllSubmissions
访问)和一个我称为 tempSub 的提交草案,它不在该列表中。我有一个列表视图,我想在其中显示 userSubs 和 tempSub 中的所有项目。
我创建了一个名为 toDisplay 的临时 ArrayList 并添加了 userSubs 中的所有项目,然后附加了 tempSub。然后我将 toDisplay 传递到我的 arrayAdapter 中。那很好用。但是当我按回键并重新加载页面时,我的 tempSub 已以某种方式添加到 userSubs 中......我自己的彻底搜索和 "find in path" 搜索显示我从未调用过 userSubs.add() 函数。
ArrayList<Submission> toDisplay = new ArrayList<>();
toDisplay = dm.theUser.getAllSubmissions();
if(dm.tempSub.draftCreated) {
toDisplay.add(dm.tempSub);
}
saa = new submissionArrayAdapter(userSubmissions.this, toDisplay.toArray(
new Submission[toDisplay.size()]));
下面是一些数组适配器代码。
private final Activity context;
private Submission[] submissions;
//constructor
public submissionArrayAdapter(Activity context, Submission[] submissions) {
super(context, R.layout.user_submission_row, submissions);
this.context = context;
this.submissions = submissions;
}
关于如何将 tempSub 添加到 userSub 有什么想法吗?
I have a list userSubs (which I access with
dm.theUser.getAllSubmissions) of items called Submission and a draft
submission I call tempSub that is not in that list.
这里假设你的意思是:
userSubs = dm.theUser.getAllSubmissions);
I create a temporary arraylist called toDisplay and add all of the
items in userSubs and then append tempSub.
我假设你指的是这个:
ArrayList<Submission> toDisplay = new ArrayList<>();
toDisplay = dm.theUser.getAllSubmissions();
if(dm.tempSub.draftCreated) {
toDisplay.add(dm.tempSub);
}
您的代码存在问题,您正在使用
创建新变量 toDisplay
ArrayList<Submission> toDisplay = new ArrayList<>();
但随后您将新创建的实例替换为:
toDisplay = dm.theUser.getAllSubmissions();
因此,您的 toDisplay
不再是 ArrayList 的新实例。这是因为您的 toDisplay
现在指的是 dm.theUser.getAllSubmissions();
返回的实例
当您使用以下代码时:
toDisplay = dm.theUser.getAllSubmissions();
if(dm.tempSub.draftCreated) {
toDisplay.add(dm.tempSub);
}
您正在将项目添加到 dm.theUser.getAllSubmissions()
引用的实例中。
请注意,在Java中,对象在方法中通过引用传递,方法返回对象的引用。
您真正需要的是将列表从 dm.theUser.getAllSubmissions();
复制到 toDisplay
。您可以使用类似这样的浅拷贝:
List<Submission> oldSubmissions = dm.theUser.getAllSubmissions();
ArrayList<Submission> toDisplay = new ArrayList<>(oldSubmissions);
深拷贝请阅读How do you make a deep copy of an object in Java?
我有一个名为 Submission 的项目的 userSubs 列表(我使用 dm.theUser.getAllSubmissions
访问)和一个我称为 tempSub 的提交草案,它不在该列表中。我有一个列表视图,我想在其中显示 userSubs 和 tempSub 中的所有项目。
我创建了一个名为 toDisplay 的临时 ArrayList 并添加了 userSubs 中的所有项目,然后附加了 tempSub。然后我将 toDisplay 传递到我的 arrayAdapter 中。那很好用。但是当我按回键并重新加载页面时,我的 tempSub 已以某种方式添加到 userSubs 中......我自己的彻底搜索和 "find in path" 搜索显示我从未调用过 userSubs.add() 函数。
ArrayList<Submission> toDisplay = new ArrayList<>();
toDisplay = dm.theUser.getAllSubmissions();
if(dm.tempSub.draftCreated) {
toDisplay.add(dm.tempSub);
}
saa = new submissionArrayAdapter(userSubmissions.this, toDisplay.toArray(
new Submission[toDisplay.size()]));
下面是一些数组适配器代码。
private final Activity context;
private Submission[] submissions;
//constructor
public submissionArrayAdapter(Activity context, Submission[] submissions) {
super(context, R.layout.user_submission_row, submissions);
this.context = context;
this.submissions = submissions;
}
关于如何将 tempSub 添加到 userSub 有什么想法吗?
I have a list userSubs (which I access with dm.theUser.getAllSubmissions) of items called Submission and a draft submission I call tempSub that is not in that list.
这里假设你的意思是:
userSubs = dm.theUser.getAllSubmissions);
I create a temporary arraylist called toDisplay and add all of the items in userSubs and then append tempSub.
我假设你指的是这个:
ArrayList<Submission> toDisplay = new ArrayList<>();
toDisplay = dm.theUser.getAllSubmissions();
if(dm.tempSub.draftCreated) {
toDisplay.add(dm.tempSub);
}
您的代码存在问题,您正在使用
创建新变量toDisplay
ArrayList<Submission> toDisplay = new ArrayList<>();
但随后您将新创建的实例替换为:
toDisplay = dm.theUser.getAllSubmissions();
因此,您的 toDisplay
不再是 ArrayList 的新实例。这是因为您的 toDisplay
现在指的是 dm.theUser.getAllSubmissions();
当您使用以下代码时:
toDisplay = dm.theUser.getAllSubmissions();
if(dm.tempSub.draftCreated) {
toDisplay.add(dm.tempSub);
}
您正在将项目添加到 dm.theUser.getAllSubmissions()
引用的实例中。
请注意,在Java中,对象在方法中通过引用传递,方法返回对象的引用。
您真正需要的是将列表从 dm.theUser.getAllSubmissions();
复制到 toDisplay
。您可以使用类似这样的浅拷贝:
List<Submission> oldSubmissions = dm.theUser.getAllSubmissions();
ArrayList<Submission> toDisplay = new ArrayList<>(oldSubmissions);
深拷贝请阅读How do you make a deep copy of an object in Java?