簡體   English   中英

在Recycler View上復制適配器

[英]Adapter duplicating on Recycler View

嗨,我是編程新手,我的問題是當我切換導航標簽時。 再次加載時,我的數據重復。

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

如果seminarsAdapter已經有一些數據,則將添加到現有數據集中。

也許,向您的seminarsAdapter類型添加一個clear方法,然后在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調用的響應中清除workshopsAdapter列表,以使數據不會重復。 試試上面的代碼

您可以清除列表前增加新的項目,但在你將要由一個或更多的東西的邏輯在未來將其添加一個情況下,我建議你添加DiffUtil您的內部Adapter來管理您的內容Adapter

DiffUtil是一個實用程序類,可以計算兩個列表之間的差異並輸出將第一個列表轉換為第二個列表的更新操作列表,可用於計算RecyclerView適配器的更新。

看一下這篇文章 ,它解釋了如何與AdapterRecyclerView一起實現它

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM