Haben Sie ein Problem bei der Implementierung einer Google Volley ImageRequest innerhalb der OnBindViewHolder() -Methode eines CustomAdapter, der RecyclerView.Adapter erweitert. Die offensive Linie ist markiert: ">>>>>>>>>>". Es verursacht keine Fehler, es tut einfach nicht das, was es tun soll (setze die zurückgegebene Bitmap in die Bildansicht) ... und stattdessen tut es nichts.Kann imageVIEW.setBitmap() mit Google Volley + Recycler nicht anzeigen
Ich habe verifiziert, dass Volley das Bitmap erfolgreich bekommt (oder zumindest denkt es das), weil meine Logs sagen "$$$ GOOD: ..." melden die richtige URL und bitmap.toString () ist nicht null. Auch habe ich versucht, andere Aktionen wie die Imageview Hintergrund blau in einem erfolgreichen onResponse Einstellung(), die es richtig gemacht, so sollte es die Bitmap
Mein Adapter festlegen, um:
package com.tba.herpderp;
import android.graphics.Bitmap;
import android.support.v7.widget.RecyclerView;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import com.android.volley.Response;
import com.android.volley.VolleyError;
import com.android.volley.toolbox.ImageRequest;
import com.android.volley.toolbox.NetworkImageView;
import java.util.ArrayList;
public class CustomAdapter extends RecyclerView.Adapter<CustomAdapter.ViewHolder> {
private static final String TAG = "CustomAdapter";
private ArrayList<person> ourlist;
public static class ViewHolder extends RecyclerView.ViewHolder {
private final NetworkImageView imageView;
private final TextView name;
private final TextView bio;
private final TextView distance;
private final TextView exp;
public ViewHolder(View v) {
super(v);
// Define click listener for the ViewHolder's View.
v.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// do something on item click
}
});
imageView = (NetworkImageView) v.findViewById(R.id.imageView);
name = (TextView) v.findViewById(R.id.Nickname);
bio = (TextView) v.findViewById(R.id.Bio);
exp = (TextView) v.findViewById(R.id.Experience);
distance = (TextView) v.findViewById(R.id.Distance);
}
public NetworkImageView getImageView() {
return imageView;
}
public TextView getName() {
return name;
}
public TextView getBio() {
return bio;
}
public TextView getDistance() {
return distance;
}
public TextView getExp() {
return exp;
}
}
// END_INCLUDE(recyclerViewSampleViewHolder)
public CustomAdapter(ArrayList<person> list) {
ourlist = list;
}
// BEGIN_INCLUDE(recyclerViewOnCreateViewHolder)
// Create new views (invoked by the layout manager)
@Override
public ViewHolder onCreateViewHolder(ViewGroup viewGroup, int viewType) {
// Create a new view.
View v = LayoutInflater.from(viewGroup.getContext())
.inflate(R.layout.single_list_item, viewGroup, false);
return new ViewHolder(v);
}
// END_INCLUDE(recyclerViewOnCreateViewHolder)
// BEGIN_INCLUDE(recyclerViewOnBindViewHolder)
// Replace the contents of a view (invoked by the layout manager)
@Override
public void onBindViewHolder(final ViewHolder viewHolder, final int position) {
// Get element from your dataset at this position and replace the contents of the view
// with that element
final person temp = ourlist.get(position);
// GET IMAGE USING VOLLEY
ImageRequest request = new ImageRequest(MainActivity.DB_HOST + "/" + temp.getPhoto(),
new Response.Listener<Bitmap>() {
@Override
public void onResponse(Bitmap bitmap) {
>>>>>>>>>> viewHolder.getImageView().setImageBitmap(bitmap);
Log.i(TAG, "$$$ GOOD: " + MainActivity.DB_HOST + "/" + temp.getPhoto());
Log.i(TAG, "$$$ GOOD: " + bitmap.toString());
}
}, 0, 0, null,
new Response.ErrorListener() {
public void onErrorResponse(VolleyError error) {
// you could set an error bitmap into the imageview here if you want
Log.i(TAG, "$$$ BAD: " + MainActivity.DB_HOST + "/" + temp.getPhoto());
}
});
// Access the RequestQueue through your singleton class.
Z_VolleySingleton.getInstance().getRequestQueue().add(request);
viewHolder.getName().setText(temp.getNick());
viewHolder.getBio().setText(temp.getBio());
viewHolder.getDistance().setText(temp.getDistance().toString());
viewHolder.getExp().setText(temp.getExperience());
}
// END_INCLUDE(recyclerViewOnBindViewHolder)
// Return the size of your dataset (invoked by the layout manager)
@Override
public int getItemCount() {
return ourlist.size();
}
}
Ich habe festgestellt, dass der neue ImageRequest() -Konstruktor, den ich verwendet habe, veraltet ist, aber ich glaube nicht, dass dies das Problem ist, nachdem sie noch in den Android Developer-Tutorials verwendet werden.
Alle Tipps würden wir uns freuen. Vielen Dank!