То, что я пытаюсь создать, представляет собой галерею изображений с горизонтальной прокруткой. У меня есть RecyclerView (поддержка 22.0.0). Проблема, с которой я сталкиваюсь, заключается в том, что когда я прокручиваю до конца и затем прокручиваю назад, обычно одно изображение будет отсутствовать иногда два. Как ни странно, когда я держусь взад-вперед, другое изображение может отсутствовать. Вот макет для элемента:RecyclerView исчезающих изображений
<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"/>
Вот 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;
}
метод загрузки извлекает изображение, из URL или получает его из памяти, если она имеет был кеширован. Это отлично работает во всех других макетах, например. ListView или GridView. Вот код, я использую, чтобы установить его в фрагменте:
final LinearLayoutManager layoutManager = new LinearLayoutManager(getActivity());
layoutManager.setOrientation(LinearLayoutManager.HORIZONTAL);
mRecyclerView.setLayoutManager(layoutManager);
Это в методе onCreateView. Когда я получаю URLs я заполнить их и установить адаптер с помощью:
myDataset[i] = imageURL; // for each image
mAdapter = new TestAdapter(myDataset);
mRecyclerView.setAdapter(mAdapter);
Интересно, линия в методе onBindViewHolder в адаптере, где я войти в положение. Я обнаружил, что ячейки, где изображение не показано, это то, что этот метод не вызывается. Похоже, что он пропускает эту ячейку по какой-то причине. Даже незнакомец, если я держу ячейку и продолжаю прокручивать слева направо, если ячейка уходит с экрана, а затем возвращается, ее изображение, как и снова, метод onBindViewHolder не вызывается.
пожалуйста, поделитесь код ImageDownloader с вашего MainActivity –
Привет, Я не могу сказать, что он большой. В основном он извлекает изображение, а затем устанавливает выталкиваемый, как только он получил его из памяти или удаленно. Он основан на образце BitmapFun. Он отлично работает в любом месте, где я использую изображения в приложении. Я думаю, что проблема заключается в самом адаптере, а не в выборе изображения. –
Ничего страшного, я думаю, что ваша проблема приведена ниже, ваш призыв загружает новое изображение, но ваш параметр растрового изображения равен нулю для вашего изображения. вы должны скачать его каждый раз, когда вы вызываете onBindViewHolder, если его уже загрузили –