RecyclerView исчезающие изображения

Я пытаюсь создать галерею изображений с горизонтальной прокруткой. У меня есть RecyclerView (поддержка 22.0.0). У меня проблема в том, что когда я прокручиваю до конца, а затем возвращаюсь назад, обычно одно изображение будет отсутствовать, иногда два. Странно, когда я продолжаю пролистывать взад и вперед, может отсутствовать другое изображение. Вот макет для элемента:

<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"/>

Вот реклама:

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;
}

Метод загрузки извлекает изображение из URL или получает его из памяти, если оно было кэшировано. Это прекрасно работает во всех других макетах, например ListView или GridView. Вот код, который я использую, чтобы установить его во фрагменте:

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

Это в методе onCreateView. Когда я получаю URL-адреса, я заполняю их и устанавливаю адаптер, используя:

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

Интересная вещь - строка в методе onBindViewHolder в адаптере, где я регистрирую позицию. Я обнаружил, что ячейки, в которых изображение не показано, - это то, что этот метод не вызывается. Как будто пропускает эту клетку по какой-то причине. Даже более странно, если я держу ячейку и продолжаю смахивать слева направо, если ячейка выходит за пределы экрана, а затем возвращается обратно, ее изображение исчезает, как и снова, метод onBindViewHolder не вызывается.

Ответы на вопрос(0)

Ваш ответ на вопрос