簡體   English   中英

Android-RecyclerView更改項

[英]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.

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