我遇到了一个非常奇怪的错误。
我正在编写一个通用类,并在其中一个方法中发现了一件奇怪的事情。这里是部分类的代码:
public abstract class GenericFragment<M extends BaseModel, A extends BaseAdapter> extends HtmlFragment {
private ArrayList<M> datas = new ArrayList<>();
private A adapter;
protected abstract String getUrl();
protected abstract A setAdapter();
protected A getAdapter() {
if(adapter == null) {
adapter = setAdapter();
}
return adapter;
}
protected ArrayList<M> getDatas() {
return datas;
}
protected void refreshData(ArrayList<M> datas) {
Log.d("before glob", String.valueOf(this.datas.size()));
Log.d("before loc", String.valueOf(datas.size()));
this.datas.clear();
Log.d("clear glob", String.valueOf(this.datas.size()));
Log.d("clear loc", String.valueOf(datas.size()));
this.datas.addAll(datas);
Log.d("after glob", String.valueOf(this.datas.size()));
Log.d("after loc", String.valueOf(datas.size()));
getAdapter().notifyDataSetChanged();
}
}
当我调用函数 refreshData()
时,全局 ArrayList
被清除,但是本地的 ArrayList
也被清除。以下是日志:
D/niviel: before glob: 5
D/niviel: before loc: 5
D/niviel: clear glob: 0
D/niviel: clear loc: 0
D/niviel: after glob: 0
D/niviel: after loc: 0
我只想将本地数组复制到全局数组。
编辑:
该函数是在子类中调用的。
requestData(activity, new requestDataCallback() {
@Override
public ArrayList<? extends BaseModel> parseDatas(Document document) {
return RecordProvider.getRecord(activity, document);
}
@Override
public void runOnUIThread(ArrayList<? extends BaseModel> datas) {
refreshData((ArrayList<Record>) datas);
}
});
refreshData
的参数是什么?如果是this.datas
,为什么不期望它会同时清除 "both"this.datas
和datas
?("both" 是因为它们是同一个实例)。 - Andy Turner