1

我正在使用加载器将数据加载到 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 但我想避免这种情况。有人可以告诉我我在这里做错了什么。

4

2 回答 2

0

您有 20 个项目,因为ArrayList保存数据upAd已经有 10 个过去的项目。然后你打电话upAd.addAll(data);。这意味着您要向该数组列表添加另外 10 个相同的项目。所以解决办法是清除适配器。

于 2013-03-04T16:12:17.660 回答
-1

在 menifiest 文件中的 Activity 声明中使用这一行。

android:configChanges="orientation|keyboardHidden"
于 2012-08-18T11:10:47.847 回答