项目被添加到ArrayAdapter中的arrayList中

时间:2018-05-15 21:32:05

标签: android arraylist android-arrayadapter

我有一个名为userSubs(我用dm.theUser.getAllSubmissions访问的)名为Submission的项目和草稿提交我称之为不在该列表中的tempSub。我有一个列表视图,我想在userSubs和tempSub中显示所有项目。

我创建一个名为toDisplay的临时ArrayList,并在userSubs中添加所有项目,然后附加tempSub。然后我将toDisplay传递给我的arrayAdapter。这很好。但是当我按下并重新加载页面时,我的tempSub已经以某种方式被添加到userSubs ...彻底搜索我自己的并且在路径中找到了#34;搜索显示我从不调用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添加到userSubs的任何想法?

1 个答案:

答案 0 :(得分:1)

  

我有一个列表userSubs(我可以访问它)   dm.theUser.getAllSubmissions)项目称为提交和草稿   提交我称之为不在该列表中的tempSub。

我假设你的意思是:

userSubs = dm.theUser.getAllSubmissions);
  

我创建一个名为toDisplay的临时arraylist并添加所有   userSubs中的项目,然后附加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?