在 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?