![](/img/trans.png)
[英]Changing value in on item also changes in another item - RecyclerView Android
[英]Android - RecyclerView changing item
我有一個RecyclerView內部的移動聯系人列表,也有一個帶有注冊手機號碼的在線數據庫,我制作了一個Web服務來檢查該號碼是否已注冊並且是否有效。
我想做的是在右邊的項目中有一個邀請文本,我想使未注冊用戶可以看到它,並且已注冊用戶將對他們不可見,這是我的onBindViewHolder
我現在得到的是邀請文本不斷顯示和消失,然后對所有人可見
@Override
public void onBindViewHolder(final ViewHolder viewHolder, final int position) {
Log.d(TAG, "Element " + position + " set.");
// Get element from your dataset at this position and replace the contents of the view
// with that element
viewHolder.getTextView().setText(mDataSet[position]);
viewHolder.getTextView2().setText(mDataSet2[position]);
viewHolder.getImageView().setImageResource(mDataSet3[position]);
Phone phone=new Phone();
phone.phone=mDataSet2[position];
WebService.getInstance().getApi().checkNumber(phone).enqueue(new Callback<MainResponse>() {
@Override
public void onResponse(Call<MainResponse> call, Response<MainResponse> response) {
if (response.body().status == 1){
viewHolder.getTextViewInvite().setVisibility(View.GONE);
}else {
viewHolder.getTextViewInvite().setVisibility(View.VISIBLE);
}
}
@Override
public void onFailure(Call<MainResponse> call, Throwable t) {
viewHolder.getTextViewInvite().setVisibility(View.VISIBLE);
}
});
}
當您在recyclerview中滾動時,您正在調用api,這肯定會花費一些時間來響應,因此您的視圖分別顯示和隱藏。
缺點:
滾動時不必要的網絡呼叫。
理想情況下,您應該在加載聯系人時而不是在滾動時預取所有用戶的狀態。 如果您喜歡這種方法,請接受並實施。
原因是您的Web服務被稱為異步任務,這意味着您的代碼不會等待來自Web服務的答案,並且當Web服務給出答案時,您的代碼將繼續。 但是為時已晚,因為您的回收視圖適配器綁定了所有視圖對象,因此請嘗試在電話對象中設置布爾值,並在將電話列表提供給回收視圖之前,檢查是否已注冊每個布爾值,並將布爾值設置為true或false。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.