在Recycler视图上复制适配器

嗨新编程和我的问题是当我切换标签上我的导航。 我的数据重新加载时重复。

httpClient.get(url, object : JsonHttpResponseHandler() { override fun onSuccess(statusCode: Int, headers: Array<out Header>, response: JSONArray) { for (i in 0 until response.length()) { val seminar = Seminar.fromJson(response.getJSONObject(i)) seminarsAdapter.add(SeminarItem(seminar)) } } override fun onFailure(statusCode: Int, headers: Array<out Header>?, responseString: String?, throwable: Throwable?) { Log.d("Seminars Fragment", throwable?.localizedMessage) } }) 

您可以在添加新项目之前清除列表,但是如果您希望将来逐一添加它们或者更多的逻辑,我建议您在Adapter添加DiffUtil以管理Adapter的内容

DiffUtil是一个实用程序类,可以计算两个列表之间的差异,并输出将第一个列表转换为第二个列表的更新操作列表。它可以用于计算RecyclerView适配器的更新。

看看这个帖子 ,它解释了如何与AdapterRecyclerView一起实现它

如果seminarsAdapter已经有一些数据,您将添加到现有的一组数据。

也许,添加一个clear方法到您的seminarsAdapter适配器类型,并在onSuccess(...)之前调用它。

 httpClient.get(url, object : JsonHttpResponseHandler() { override fun onSuccess(statusCode: Int, headers: Array<out Header>, response: JSONArray) { if(seminarsAdapter.size()>0){ seminarsAdapter.clear(); } for (i in 0 until response.length()) { val seminar = Seminar.fromJson(response.getJSONObject(i)) seminarsAdapter.add(SeminarItem(seminar)) } } override fun onFailure(statusCode: Int, headers: Array<out Header>?, responseString: String?, throwable: Throwable?) { Log.d("Seminars Fragment", throwable?.localizedMessage) } }) 

清晰的研讨会适应API调用,以便数据不会重复。 试试上面的代码