notifyItemInsertedRange () не работает на адаптере просмотра утилита - PullRequest
0 голосов
/ 07 июня 2019

Я использовал переработчик в своем проекте. У меня проблема с обновлением данных. Я хочу использовать метод notifyItemRangeInserted () или notifyItemInserted (), но ни один из них не работает (массив данных обновлен, но новый элемент не отображается в представлении реселлера). Это действительно сбивает с толку, потому что notifyDataSetChanged () работает.

Я пробовал как notifyItemInserted (index), так и notifyItemRangeInserted (startIndex ,ppedCount), но ни один из них не работает. Я также погуглил эту проблему, но я не нашел подобной проблемы.

RequestQueue queue = Volley.newRequestQueue(this);
        StringRequest postRequest = new StringRequest(Request.Method.POST, UrlHouse.MOMENT_EXTENTION,
                response -> {
                    // response
                    Log.e("moment_extention", response);
                    try {
                        JSONArray momentArray = new JSONArray(response);
                        CustomJsonParser jsonParser = new CustomJsonParser(this);
                        for(int i = 0; i < momentArray.length(); i++){
                            JSONObject c = momentArray.getJSONObject(i);
                            momentArrayList.add(jsonParser.parseMomentData(c));
                        }
                        if (momentArray.length() > 0){
                            runOnUiThread(() -> {
                                Log.e("item_count", String.valueOf(mAdapter.getItemCount()));
                                //mAdapter.notifyDataSetChanged();
                                //mAdapter.notifyItemInserted(10);
                                mAdapter.notifyItemRangeInserted(momentArrayList.size() - momentArray.length(), momentArray.length());
                            });
                        }
                        if (momentArray.length()  < 10){
                            stopLoading = true;
                            extentionLoading.setVisibility(View.GONE);
                        }else{
                            extentionLoading.setVisibility(View.VISIBLE);
                        }
                    } catch (JSONException e) {
                        e.printStackTrace();
                    }
                },
                error -> {
                    // error
                }
        ) {
            @Override
            protected Map<String, String> getParams()
            {
                Map<String, String>  params = new HashMap<String, String>();
                params.put("key_owner", userData.getUserId());
                params.put("session_key", userData.getLoginKey());
                params.put("user_id", userData.getUserId());
                params.put("excluded_post", getExcludedPost());
                return params;
            }
        };
        postRequest.setRetryPolicy(new DefaultRetryPolicy(24 * 60 * 60 * 1000, 0, 1f) );
        queue.add(postRequest);

Я хочу, чтобы элемент в программе просмотрщика обновил новые данные. в моем случае после обновления адаптера на экране должно отображаться 20 элементов (10 исходных элементов и 10 новых элементов), но вместо отображения 20 элементов отображаются только 10 элементов (только 10 исходных элементов)

1 Ответ

0 голосов
/ 07 июня 2019

Вы используете momentArray.length () в качестве конечной точки диапазона, и поэтому он не работает.

Так что просто замените строку ниже в runOnUiThread (),

mAdapter.notifyItemRangeInserted(momentArrayList.size() - momentArray.length(), momentArray.length());

К

mAdapter.notifyItemRangeInserted(momentArrayList.size() - momentArray.length() + 1, momentArray.length());
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...