简体   繁体   English

等待绑定数据,直到响应进入Recycler视图适配器

[英]Wait to bind data until the response come in Recycler view adapter

I am working on an application where I have the requirement to make the server request on click of a row, All thing working fine but my code does not wait until the response comes so nothing is set to the Image view, Is there anyone who faces the same problem and find the solution. 我正在开发一个应用程序,该应用程序要求单击鼠标即可发出服务器请求,一切正常,但是我的代码不会等到响应到来之后才对Image视图进行设置,是否有人面对同样的问题,找到解决方案。

My Adapter code is: 我的适配器代码是:

 public class DocumentAdapter extends RecyclerView.Adapter<DocumentAdapter.ViewHolder> implements  Response.ErrorListener{
        Context context;
        private ArrayList<FetchDocument> docDatalist;
        private int expandedPosition = -1;
        int customerSerial;
        private int vinappserial;
        ViewHolder holderNew;


        UtilityOfActivity utilityOfActivity;
        List<ImageFetchResponseDocumentList> list = new ArrayList<>();



        public DocumentAdapter(ArrayList<FetchDocument> docDatalist, Context context,String vinappserial) {
            this.docDatalist = docDatalist;
            this.context = context;
            utilityOfActivity = new UtilityOfActivity((Activity) context);
            this.vinappserial= Integer.valueOf(vinappserial);

            UserDetail userDetail = new Gson().fromJson(PrefrenceFile.getInstance().getString(Constant.PREF_KEY_USER_DATA), UserDetail.class);
            customerSerial = userDetail.getLoginResponse().getCustInfo().getCustSerialNo();
        }

        @Override
        public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
            View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.fragment_document_listview_adapter, parent, false);

            ViewHolder viewHolder = new ViewHolder(v);


            return viewHolder;
        }
        @Override
        public void onBindViewHolder(final ViewHolder holder, final int position) {
            holder.doc_type.setText(docDatalist.get(position).getDocTypeDesc());
            if (position == expandedPosition) {
                holder.myDocumentlistexpeded.setVisibility(View.VISIBLE);
            } else {
                holder.myDocumentlistexpeded.setVisibility(View.GONE);
            }
            holder.myDocumentListCollapse.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {


    //by the below line I am making the request
                    imagerequestserver(docDatalist.get(position), vinappserial);
    //here I am setting the image to the imageview this code execute before response come
                    for (int i = 0; i < list.size(); i++) {
                        NetworkImageView imageView = new NetworkImageView(context);
                        imageView.setAdjustViewBounds(true);
                       imageView.setImageUrl(list.get(i).getNewFilePath().concat(list.get(i).getNewFilename()), VolleyRequestQue.getmInstance(context).getImageLoader());
                        holder.horizontal_scrollView_linear.addView(imageView);
                    }
                    if (expandedPosition >= 0) {
                        int prev = expandedPosition;
                        notifyItemChanged(prev);
                    }
                    // Set the current position to "expanded"
                    expandedPosition = holder.getPosition();
                    notifyItemChanged(expandedPosition);
                    holder.myDocumentlistexpeded.setVisibility(View.VISIBLE);
                }
            });
            holder.layoutAddDoc.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    holder.expanded_menu_cameraImage.setVisibility(View.VISIBLE);
                }
            });
        }

        @Override
        public int getItemCount() {
            return docDatalist.size();
        }
        public  interface SendHoldertdata{
             void setdata(ViewHolder holder,  int position);
        }

        class ViewHolder extends RecyclerView.ViewHolder {
            TextView doc_type;
            LinearLayout myDocumentlistexpeded;
            LinearLayout myDocumentListCollapse;
            LinearLayout horizontal_scrollView_linear;
            LinearLayout expanded_menu_cameraImage;
            RelativeLayout layoutAddDoc;

            public ViewHolder(View itemView) {
                super(itemView);
                doc_type = (TextView) itemView.findViewById(R.id.doc_type);
                myDocumentlistexpeded = (LinearLayout) itemView.findViewById(R.id.myDocumentlistexpeded);
                myDocumentListCollapse = (LinearLayout) itemView.findViewById(R.id.myDocumentListCollapse);
                horizontal_scrollView_linear = (LinearLayout) itemView.findViewById(R.id.horizontal_scrollView_linear);
                expanded_menu_cameraImage = (LinearLayout) itemView.findViewById(R.id.expanded_menu_cameraImage);
                layoutAddDoc = (RelativeLayout) itemView.findViewById(R.id.layoutAddDoc);


            }

        }
        public void imagerequestserver(FetchDocument fetchDocument, int vinappserial) {

            ImageFetchRequest imageFetchRequest = new ImageFetchRequest();

            imageFetchRequest.setCustSerial(customerSerial);
            imageFetchRequest.setDocGroup(fetchDocument.getDocTypeCode());
            imageFetchRequest.setVehSerial(String.valueOf(vinappserial));
            imageFetchRequest.setDocSerial("0");
            String url = Constant.API_MAIN + Constant.API_DOCUMENT_IMAGEFETCH;
            AbstractVolleyRequest jsonObjectrequest = new
                    AbstractVolleyRequest(url, this, new DocumentAdapter.DocumentImageFetchResponseListner(fetchDocument, vinappserial), imageFetchRequest, Request.Method.POST);
            jsonObjectrequest.setTag("DocumentImageFetchRequest");
            Log.v("DocumentFetchRequest", "DocumentImageFetchRequest" + jsonObjectrequest);
            VolleyRequestQue.getmInstance(context.getApplicationContext()).addToRequestQueue(jsonObjectrequest);

        }
        @Override
        public void onErrorResponse(VolleyError error) {
            if (context != null) {
                utilityOfActivity.progresDissmiss();
            }
            utilityOfActivity.toast(context.getString(R.string.connectivity_server_error));
        }

        public class DocumentImageFetchResponseListner extends MyListner<ImageFetchResponse> {
            ImageFetchResponse response;
            FetchDocument fetchDocument;
            String vinappserial;

            public DocumentImageFetchResponseListner(FetchDocument fetchDocument, int vinappserial) {

                super(ImageFetchResponse.class);
                this.vinappserial = String.valueOf(vinappserial);
                this.fetchDocument = fetchDocument;
              //  this.moveFromDocList = moveFromDocList;
                utilityOfActivity.progressDialogShow(context.getString(R.string.please_wait));
            }

            @Override
            public void onResponse(MyResponse instaResponse) {
                utilityOfActivity.progresDissmiss();
                if (instaResponse != null) {
                    if (instaResponse instanceof ImageFetchResponse) {
                        response = (ImageFetchResponse) instaResponse;
                        if (response.getResult().getResultStatus().contains("SUCCESS")) {

                            list = response.getDocumentList();
                            Log.d("","");
                            if (list.size() > 0) {

                            } else {
                               // imageDelete.setVisibility(View.GONE);
                             //   no_media.setVisibility(View.VISIBLE);
                            }
                           /*else {
                                if (moveFromDocList)
                                utilityOfActivity.moveFragment(FragmentAddDocument.newInstance(fetchDocument, vinappserial), Constant.TAG_GLOBAL_2, R.id.container);
                            }*/
                        } else {
                            utilityOfActivity.toast(context.getString(R.string.connectivity_server_error));
                        }
                    }
                }
            }





        }
}

For any clarification inside the code ask me : 对于代码中的任何澄清,请问我:

if (response.getResult().getResultStatus().contains("SUCCESS")) {
    List<ImageFetchResponseDocumentList> newList = response.getDocumentList();
    list.addAll(newList);
    Log.d("","");
    ....
}

Check this code. 检查此代码。 And do not put request api to adapter. 并且不要将请求api放入适配器。 read the link 阅读链接

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM