RecyclerView仅显示最后一条数据及数据位置调整问题求助
问题修复与解答
一、RecyclerView仅显示最后一条数据的修复
问题核心:你在循环外部创建了PeopleModel对象,每次循环只是修改该对象的属性值,再重复添加到列表中。由于列表里所有元素都是同一个对象的引用,最终所有条目都会显示最后一次修改后的属性值。
修复方案:将PeopleModel的实例化代码移到for循环内部,每次循环创建新的对象实例:
修改后的核心代码片段:
try { JSONArray jsonArray = new JSONArray(response); for (int i = 0; i < jsonArray.length(); i++) { // 每次循环创建新的PeopleModel实例 PeopleModel peopleModel = new PeopleModel(); JSONObject jsonObject = jsonArray.getJSONObject(i); peopleModel.setFirstName(jsonObject.getString("first_name")); peopleModel.setLastName(jsonObject.getString("last_name")); peopleModel.setId(String.valueOf(jsonObject.getInt("id"))); peopleModel.setCity(jsonObject.getString("city")); peopleModelList.add(peopleModel); } recyclerView.setLayoutManager(new LinearLayoutManager(MainActivity.this, RecyclerView.VERTICAL,false)); recyclerView.setAdapter(new PeopleAdapter(peopleModelList)); } catch (JSONException e) { throw new RuntimeException(e); }
二、让数据第一条显示在RecyclerView第0位
修复第一个问题后,你的代码默认会按照JSON数组的顺序(从索引0到末尾)将数据添加到列表中,RecyclerView会遵循列表的顺序从第0位开始展示内容,因此原JSON数组的第一条内容自然会显示在RecyclerView的第0位,无需额外修改。
如果后续需要调整数据顺序(比如反转列表),可在添加完所有数据后调用:
Collections.reverse(peopleModelList);
当前场景下不需要此操作。
内容的提问来源于stack exchange,提问作者Ehsan Taghizadeh
相关产品推荐
相关产品推荐

