当滚动条到达结束时,Gridview将从头开始刷新

时间:2015-01-24 12:04:51

标签: java android json eclipse

在gridview中加载数据时会发生这种情况。这是我的片段,包含gridview上的滚动监听器。但每当我重新加载数据时,整个gridview重新加载和滚动从顶部开始而不是从加载数据的位置开始。我正在使用单一gridview。

    public class Women_Ethnic_Fragment extends Fragment {


        private static String url = "http://------/-------";

        private int mVisibleThreshold = 5;
        private int mCurrentPage = 0;
        private int mPreviousTotal = 0;
        private boolean mLoading = true;
        private boolean mLastPage = false;

        public Women_Ethnic_Fragment() {
        }

        @Override
        public View onCreateView(LayoutInflater inflater, 
    ViewGroup container,
                Bundle savedInstanceState) {

            View rootView = inflater.inflate(
       R.layout.gridview_fragment, container,
                    false);
            setRetainInstance(true);
            arrayList = new ArrayList<Items>();
            gridView = (GridView) rootView.findViewById(R.id.gridView1);

            new LoadData().execute(url);
     //scrolling portion
            gridView.setOnScrollListener(new OnScrollListener() {
                @Override
                public void onScroll(AbsListView view, 
                     int firstVisibleItem,
                        int visibleItemCount, int totalItemCount) {

                    if (mLoading) {
                        if (totalItemCount > mPreviousTotal) {

                            mLoading = false;
                            mPreviousTotal = totalItemCount;
                            mCurrentPage++;


                            if (mCurrentPage + 1 > 50) {
                                mLastPage = true;
                            }
                        }
                    }
                    if (!mLastPage
                            && !mLoading
    && (totalItemCount - visibleItemCount) <= (firstVisibleItem + mVisibleThreshold)) {
//new asynctask called
                new LoadData()
                    .execute("http://-------/---------");
                        mLoading = true;
                    }
                }

                @Override
                public void onScrollStateChanged(AbsListView view, 
       int scrollState) {

                }

            });

            return rootView;

        }
    //my asynctask
        private class LoadData extends AsyncTask<String, 
                            Void, Void> {


            @Override
            protected void onPostExecute(Void result) {

                tp.dismiss();


                adap = new  Grid_View_Adatper(getActivity().getApplicationContext(),
                        arrayList);
                gridView.setAdapter(adap);
                super.onPostExecute(result);
            }

            @Override
            protected void onPreExecute() {

        tp = new TransparentProgressDialog(getActivity(),
                        R.drawable.spinner);


                tp.setCancelable(false);
                tp.setCanceledOnTouchOutside(false);

                tp.show();
                super.onPreExecute();
            }

    @Override
    protected Void doInBackground(String... urls) {
        try {

            HttpClient client = new DefaultHttpClient();
            HttpGet httpget = new HttpGet(urls[0]);
            HttpResponse response = client.execute(httpget);
            HttpEntity entity = response.getEntity();
                String data = EntityUtils.toString(entity);

                    JSONArray json = new JSONArray(data);


                    for (int i = 0; i < json.length(); i++) {

                        JSONObject e = json.getJSONObject(i);

                        String name = e.getString("name");
                        String price = e.getString("price");
                        String image = e.getString("image");
                        String code = e.getString("sku");
                        tems = new Items(name, price, image, code);
                        arrayList.add(tems);
                    }
                } catch (JSONException e) {
                    e.printStackTrace();
                } catch (ClientProtocolException e) {


                } catch (IOException e) {


                } catch (RuntimeException e) {

                }

                return null;
            }
        }

    Please help someone.
    Thanks in advane.

1 个答案:

答案 0 :(得分:0)

问题是你一遍又一遍地实例化适配器。而是先检查适配器,如果它不为空,则设置数据,然后通知数据集更改。

if (adapter == null) {
   adapter = new GridViewAdapter...
   gridView.setAdapter(adapter)
}

// list refers the list inside in your adapter
list.addAll(newList); // or do your implementation
adapter.notifyDataSetChanged();