我有一个名为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的任何想法?
答案 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);