notifyItemInsertedRange()在recyclerview适配器上不起作用

时间:2019-06-07 05:28:44

标签: java android android-recyclerview

我在项目中使用了recyclerview。我在更新数据时遇到问题。我想使用notifyItemRangeInserted()或notifyItemInserted()方法,但是它们都不起作用(arraylist已更新,但新项目未在recyclerview中显示)。这确实令人困惑,因为notifyDataSetChanged()可以正常工作。

我尝试了notifyItemInserted(index)和notifyItemRangeInserted(startIndex,insertCount),但是它们都不起作用。我也用谷歌搜索了这个问题,但是没有找到类似的问题。

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);

我希望recyclerview项目更新新数据。就我而言,更新适配器后,它应该在屏幕上显示20个项目(原始项目10个,而新项目10个),而不是显示20个项目,它仅显示10个项目(仅原始10个项目)

1 个答案:

答案 0 :(得分:1)

您正在使用momentArray.length()作为范围的端点,这就是它不起作用的原因。

所以只需替换runOnUiThread()中的行,

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

收件人

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