2017-06-13 213 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,这肯定需要一些时间来响应,因此您的视图分别显示和隐藏。

缺点:

不必要的网络调用滚动。

理想情况下,您应该在加载联系人时而不是在滚动时预取所有用户的状态。如果你喜欢这种方法,那么请接受并实施。

相关问题