2017-06-13 151 views
0

我有一個RecyclerView內的移動聯繫人列表,我也有一個在線數據庫與註冊手機號碼我做了一個Web服務,以檢查號碼是否已註冊,它的工作。
我想要做的是有在右邊的項目邀請的文字,我想使它成爲未註冊的用戶可查看和註冊用戶將是他們看不到這低於Android - RecyclerView更改項目

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

    } 
+0

無論TextView的當前狀態如何,您都在爲每一行執行網絡連接?可能不是性能最高的功能 –

+0

爲什麼你在onBindViewHolder()中打api,根據我的建議獲取所有電話號碼,與在線數據庫比較,然後將該列表分配給recyclerview適配器。並使用您的國旗 –

+0

切換「邀請」文字,請您向我解釋如何做到這一點? – RealDEV

回答

0

的原因是你的web服務被稱爲異步任務保持可見,這意味着您的代碼不等待來自Web服務的答案,當Webservice給出答案時,您的代碼將繼續。但它太晚了,因爲您的回收視圖適配器綁定了所有視圖對象,因此請嘗試在電話對象中設置布爾值,然後將電話列表發送到回收視圖,然後檢查每個視圖是否已註冊,並將布爾值設置爲true或false。

1

當您在recyclerview中滾動時,您正在調用api,這肯定需要一些時間來響應,因此您的視圖分別顯示和隱藏。

缺點:

不必要的網絡調用滾動。

理想情況下,您應該在加載聯繫人時而不是在滾動時預取所有用戶的狀態。如果你喜歡這種方法,那麼請接受並實施。

相關問題