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