我在项目中使用了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个项目)>
答案 0 :(得分:1)
您正在使用momentArray.length()作为范围的端点,这就是它不起作用的原因。
所以只需替换runOnUiThread()中的行,
mAdapter.notifyItemRangeInserted(momentArrayList.size() - momentArray.length(), momentArray.length());
收件人
mAdapter.notifyItemRangeInserted(momentArrayList.size() - momentArray.length() + 1, momentArray.length());