RecyclerView verschwindende Bilder

Was ich versuche zu erstellen, ist eine horizontal scrollende Bildergalerie. Ich habe einen RecyclerView (Unterstützung 22.0.0). Das Problem, das ich habe, ist, dass, wenn ich zum Ende scrolle und dann zurück scrolle, normalerweise ein Bild manchmal zwei fehlen wird. Seltsamerweise könnte ein anderes Bild fehlen, wenn ich immer wieder hin und her wische. Hier ist das Layout für den Artikel:

<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="160dp">

<ImageView
    android:id="@+id/product_variation_image"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:scaleType="centerCrop"
    android:layout_gravity="center"/>

Hier ist der Adaper:

public class TestAdapter extends RecyclerView.Adapter<TestAdapter.ViewHolder> {
private String[] mDataset;

public static class ViewHolder extends RecyclerView.ViewHolder {

    public ImageView mImageView;
    public ViewHolder(View v) {
        super(v);
        mImageView = (ImageView) v.findViewById(R.id.product_variation_image);
    }
}

public TestAdapter(String[] myDataset) {
    mDataset = myDataset;
}

@Override
public TestAdapter.ViewHolder onCreateViewHolder(ViewGroup parent,
                                               int viewType) {
    // create a new view
    View v = LayoutInflater.from(parent.getContext())
            .inflate(R.layout.variaton_list_item, parent, false);
    ViewHolder vh = new ViewHolder(v);
    return vh;
}

@Override
public void onBindViewHolder(ViewHolder holder, int position) {

    holder.mImageView.setImageDrawable(null);
    String url = mDataset[position];
    Log.i("TEST", "position = " + position);
    ((MainActivity)MainActivity.getInstance()).imageDownloader.download(url, holder.mImageView);
}

@Override
public int getItemCount() {
    return mDataset.length;
}

Die Download-Methode ruft das Bild von einer URL ab oder ruft es aus dem Speicher ab, wenn es zwischengespeichert wurde. Dies funktioniert problemlos in allen anderen Layouts, z. ListView oder GridView. Hier ist der Code, den ich verwende, um ihn im Fragment einzurichten:

    final LinearLayoutManager layoutManager = new LinearLayoutManager(getActivity());
    layoutManager.setOrientation(LinearLayoutManager.HORIZONTAL);
    mRecyclerView.setLayoutManager(layoutManager);

Dies ist in der onCreateView-Methode. Wenn ich die URLs bekomme, fülle ich sie auf und setze den Adapter mit:

  myDataset[i] = imageURL; // for each image       
  mAdapter = new TestAdapter(myDataset);
  mRecyclerView.setAdapter(mAdapter);

Das Interessante ist die Zeile in der onBindViewHolder-Methode im Adapter, in der ich die Position protokolliere. Was ich festgestellt habe, ist, dass Zellen, in denen das Bild nicht angezeigt wird, diese Methode nicht aufgerufen wird. Es ist, als würde diese Zelle aus irgendeinem Grund übersprungen. Noch seltsamer, wenn ich eine Zelle halte und von links nach rechts wische, wenn eine Zelle den Bildschirm verlässt und dann wieder eintritt, wird das Bild so lange nicht mehr angezeigt, wie die Methode onBindViewHolder nicht aufgerufen wird.

Antworten auf die Frage(6)

Ihre Antwort auf die Frage