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 не вызывается.