每次我拉时刷新错误都会不断添加

时间:2018-07-12 02:27:07

标签: android android-layout listview android-fragments

我尝试创建一次请求刷新。 每次我拉它。

it repeat the data on recyclerview

这是我的代码:

public class LatestGradeFragment extends Fragment implements SwipeRefreshLayout.OnRefreshListener{
    List<ListGradeData> sectionList;
    RecyclerView recyclerView;
    SwipeRefreshLayout mSwipeRefreshLayout;

    public static LatestGradeFragment newInstance() {
        return new LatestGradeFragment();
    }

    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        View rootView = inflater.inflate(R.layout.fragment_latest_grade, container, false);

        //RecyclerView+CardView for section
        recyclerView = (RecyclerView) rootView.findViewById(R.id.display_recyclerView);
        recyclerView.setHasFixedSize(true);
        recyclerView.setLayoutManager(new LinearLayoutManager(getActivity()));

        sectionList = new ArrayList<>();

        mSwipeRefreshLayout = (SwipeRefreshLayout) rootView.findViewById(R.id.swipeRefreshSection);
        mSwipeRefreshLayout.setOnRefreshListener(this);
        mSwipeRefreshLayout.setColorSchemeResources(R.color.colorPrimary,
                android.R.color.holo_green_dark,
                android.R.color.holo_orange_dark,
                android.R.color.holo_blue_dark);

        mSwipeRefreshLayout.post(new Runnable() {

            @Override
            public void run() {

                mSwipeRefreshLayout.setRefreshing(true);

                // Fetching data from server
                loadSection();
            }
        });
        return rootView;
    }

    @Override
    public void onRefresh() {

        loadSection();

    }

    private void loadSection() {

        mSwipeRefreshLayout.setRefreshing(true);

        StringRequest stringRequest = new StringRequest(Request.Method.GET, Constants.USER_GRADE,
                new Response.Listener<String>() {
                    @Override
                    public void onResponse(String response) {
                        try {
                            //converting the string to json array object
                            JSONArray array = new JSONArray(response);

                            //traversing through all the object
                            for (int i = 0; i < array.length(); i++) {

                                //getting product object from json array
                                JSONObject sections = array.getJSONObject(i);

                                //adding the product to product list
                                sectionList.add(new ListGradeData(
                                        sections.getInt("id"),
                                        sections.getString("section"),
                                        sections.getString("level"),
                                        sections.getString("schoolyear")
                                ));
                            }

                            //creating adapter object and setting it to recyclerview
                            LatestGradeAdapter adapter = new LatestGradeAdapter(getActivity(), sectionList);
                            recyclerView.setAdapter(adapter);
                        } catch (JSONException e) {
                            e.printStackTrace();
                        }
                        // Stopping swipe refresh
                        mSwipeRefreshLayout.setRefreshing(false);
                    }
                },
                new Response.ErrorListener() {
                    @Override
                    public void onErrorResponse(VolleyError error) {
                        // Stopping swipe refresh
                        mSwipeRefreshLayout.setRefreshing(false);
                    }
                });

        //adding our stringrequest to queue
        Volley.newRequestQueue(getActivity().getApplicationContext()).add(stringRequest);
    }

    @Override
    public String toString() {
        return "LatestGradeFragment ";
    }
}

我是android / java的新手,谁能帮助我。

2 个答案:

答案 0 :(得分:1)

在api的内部响应中,您必须首先清除列表,因此它永远不会重复数据。您在try块内的响应内的代码应为:

  

if(sectionList!= null){            sectionlist.clear();       }

答案 1 :(得分:0)

删除这部分,不必要的

   mSwipeRefreshLayout.post(new Runnable() {

            @Override
            public void run() {

                mSwipeRefreshLayout.setRefreshing(true);

                // Fetching data from server
                loadSection();
            }
        });

,您应该将LatestGradeAdapter创建为Globe变量,只要从服务器获取新数据就通知数据更改