我正在使用加载器将数据加载到gridview中。首先让我给你看一些代码: -
The Fragment
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle icic){
View v=inflater.inflate(R.layout.thegrid, container, false);
final GridView gv = (GridView)v.findViewById(
R.id.thegridview);
gv.setAdapter(upAd);//upAd is the array adapter initialized in oncreate of the fragment
gv.setOnItemClickListener(this);
Bundle args=new Bundle();
args.putString("page", String.valueOf(page));
getLoaderManager().initLoader(1, args, this);
return v;
}
@Override
public Loader<ArrayList<HashMap<String, String>>> onCreateLoader(int loaderId,Bundle thebundle) {
if(loaderId==1){
String page=thebundle.getString("page");
return new MyLoader(getActivity().getApplicationContext(),page);
}
return null;
}
@Override
public void onLoadFinished(Loader<ArrayList<HashMap<String, String>>> theLoader,ArrayList<HashMap<String, String>> data) {
upAd.addAll(data);
}
现在当片段显示时,它会显示一个包含10个元素的网格。现在,当屏幕方向改变时,加载器表现良好,不会再次下载数据,但会再次向网格添加相同的数据。所以我最终得到一个20个元素的网格,相同的10个重复两次。我可以打电话给: -
upAd.clear()
在onLoadFinished但我想避免这种情况。有人可以告诉我这里我会做错什么。
答案 0 :(得分:0)
您有20个项目,因为在ArrayList
中保存数据的upAd
已经有10个项目。然后你打电话给upAd.addAll(data);
。这意味着您要向该数组列表添加另外10个相同的项目。因此解决方案是清除适配器。
答案 1 :(得分:-1)
在清单文件的活动声明中使用此行。
android:configChanges="orientation|keyboardHidden"