Как я могу сделать мой список фрагментов автоматическим c refre sh при выборе спиннера? - PullRequest
0 голосов
/ 16 апреля 2020

Это аналогичный вопрос, но разница в том, что я использую cache в моем Listview.

Я пытаюсь создать событие фильтра в моем Listview, где есть spinner и когда они выбирают на счетчике автоматически обновляется список данных c, но проблема, которую я получаю, заключается в том, что при выборе счетчика список не обновляется, он обновляется только при использовании функции swipe refre sh , но как мне сделать это обновление без использования Swipe Refre sh?

вот мой текущий код:

вот моя функция запроса

 public void loadDeals(String branch){

        HashMap<String, String> user = user_branch.getBranches();
        branches = user.get("branch_id");

        finalBranch = branch;

        if (finalBranch == null){
            finalBranch = branches;
        }else{
            finalBranch = branch;
        }

        final Constant WebConfig = new Constant();

        queue = Volley.newRequestQueue(getContext());

        CustomRequest stringRequest = new CustomRequest(Request.Method.POST, WebConfig.deals_filter, null, new Response.Listener<JSONObject>()
        {
            @Override
            public void onResponse(JSONObject response)
            {

                try {

                    JSONArray details = response.getJSONArray("data");

                    dealsList.clear();

                    HashMap<String, String> user = user_branch.getBranches();
                    branches = user.get("branch_id");

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

                        JSONObject object = details.getJSONObject(i);

                        dealsList.add(new DealsModel(
                                object.getInt("id"),
                                object.getString("a"),
                                object.getString("b"),
                                object.getString("c"),
                                object.getInt("d"),
                                object.getString("e")

                        ));


                        adapter.notifyDataSetChanged();
                        swipeRefreshLayout.setRefreshing(false);

                        loading.setVisibility(View.GONE);
                        dealsRecyclerView.setVisibility(View.VISIBLE);
                        cons.setVisibility(View.VISIBLE);

                    }


                } catch (JSONException e) {
                    e.printStackTrace();
                }

            }
        }, new Response.ErrorListener() {

            @Override
            public void onErrorResponse(VolleyError error) {

            }
        }){

            @Override
            protected Map < String, String > getParams() throws AuthFailureError {
                Map < String, String > params = new HashMap < > ();

                Log.d("current_branch",finalBranch);

                params.put("people_id", "1");
                params.put("place_id", finalBranch);

                return params;
            }

            @Override
            protected Response<JSONObject> parseNetworkResponse(NetworkResponse response) {

                try {
                    Cache.Entry cacheEntry = HttpHeaderParser.parseCacheHeaders(response);
                    if (cacheEntry == null) {
                        cacheEntry = new Cache.Entry();
                    }
                    final long cacheHitButRefreshed = 3 * 60 * 1000; // in 3 minutes cache will be hit, but also refreshed on background
                    final long cacheExpired = 24 * 60 * 60 * 1000; // in 24 hours this cache entry expires completely
                    long now = System.currentTimeMillis();
                    final long softExpire = now + cacheHitButRefreshed;
                    final long ttl = now + cacheExpired;
                    cacheEntry.data = response.data;
                    cacheEntry.softTtl = softExpire;
                    cacheEntry.ttl = ttl;
                    String headerValue;
                    headerValue = response.headers.get("Date");
                    if (headerValue != null) {
                        cacheEntry.serverDate = HttpHeaderParser.parseDateAsEpoch(headerValue);
                    }
                    headerValue = response.headers.get("Last-Modified");
                    if (headerValue != null) {
                        cacheEntry.lastModified = HttpHeaderParser.parseDateAsEpoch(headerValue);
                    }
                    cacheEntry.responseHeaders = response.headers;
                    final String jsonString = new String(response.data,
                            HttpHeaderParser.parseCharset(response.headers));
                    return Response.success(new JSONObject(jsonString), cacheEntry);
                } catch (UnsupportedEncodingException e) {
                    return Response.error(new ParseError(e));
                } catch (JSONException e) {
                    return Response.error(new ParseError(e));
                }
            }

            @Override
            protected void deliverResponse(JSONObject response) {
                super.deliverResponse(response);
            }

            @Override
            public void deliverError(VolleyError error) {
                super.deliverError(error);
            }

            @Override
            protected VolleyError parseNetworkError(VolleyError volleyError) {
                return super.parseNetworkError(volleyError);
            }
        };
        queue.add(stringRequest);
    }

и это код для счетчика

       spinnerDeals.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
            @Override
            public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) {

                branch_name = spinnerDeals.getItemAtPosition(spinnerDeals.getSelectedItemPosition()).toString();

                if (branch_name.equals("All Branches")) {
                    branch_name = "All";
                }
                if (branch_name.equals("a")) {
                    branch_name = "1";
                }
                if (branch_name.equals("b")) {
                    branch_name = "2";
                }
                if (branch_name.equals("c")) {
                    branch_name = "3";
                }

                Log.d("branch", branch_name);

            }
            @Override
            public void onNothingSelected(AdapterView<?> adapterView) {
                // DO Nothing here
            }
        });

Я думаю, у меня возникла эта проблема из-за кеша.

Любая помощь будет очень признательна, большое спасибо!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...