Почему RecyclerView слишком много прокручивает над первым элементом и мерцает во время прокрутки?

РЕДАКТИРОВАТЬ: проблема решена!

мой RecyclerView мерцает при прокрутке. На одном экране 5-6 предметов. Когда я прокручиваю вниз, экран мерцает и скроллер переходит обратно в верхнюю часть RecyclerView, Теперь после этого, если я прокручиваю снова, ReccyclerView прокручивается слишком над первым элементом. Если бы я повторил процесс прокрутки вверх и вниз очень быстро, представление рециркулятора полностью прокручивается вниз, оставляя только пустой фон. И после этого, если я прокручиваю в любую сторону, ничего не появляется. Скроллер снова не работает после этого.

я использую Lucasr Two Way View, Обсуждаемая мною проблема также упоминается в книге "Некоторые странности" с recyclerView.Adapter и UIL, но еще не решена. У меня есть более 20 изображений в моем RecyclerView, который может быть увеличен. Каждое изображение имеет размер более 100 КБ.

Для загрузки изображения я пробовал Universal Image Loader(UIL) с включенным кэшированием. Но это не помогло. Мерцание сохраняется UIL, Я также проверил с GLIDE но проблема все еще там.

Чтобы сделать это более ясным, вот снимки с моего ADM, code> RecyclerView </ code> Мерцание во время проблемы с прокруткой RecyclerView Мерцание во время проблемы с прокруткой">

Вот мой класс Holder:

public class TileAdapter extends BaseTwoWayViewAdapter {

private static final String TAG = makeLogTag(TileAdapter.class);
private Context context;
private List<UserCategory> itemsList;

public TileAdapter(Context context, List<Tile> itemsList) {
    super(context, itemsList);
    this.context = context;
    this.itemsList = itemsList;
}

@Override
public TestHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.single_tile_full_length, null);
    TestHolder tileHolder = new TestHolder(v);
    return tileHolder;
}

@Override
public void onBindViewHolder(RecyclerView.ViewHolder holder, final int position) {
    final Test tile = itemsList.get(position);
    final TestHolder tileHolder = (TestHolder) holder;
    final View itemView = tileHolder.itemView;
    tileHolder.bindHolder(tile);
}

/**
 * View Holder class
 */
public class TestHolder extends RecyclerView.ViewHolder {
    private TextView titleTextView;
    private ImageView imageView;
    private ImageLoader imageLoader;

    public TestHolder(View view) {
        super(view);
        this.titleTextView = (TextView) view.findViewById(R.id.titleTextView);
        this.imageView = (ImageView) view.findViewById(R.id.imageView);
        imageLoader = new ImageLoader(context);
    }

    void bindHolder(final Tile tile) {
        titleTextView.setText(tile.getName());

        if(imageView != null) {                
            ViewParent parent = imageView.getParent();
            int backgroundColor = context.getResources().getColor(R.color.backgroundColor);
            if (parent != null && parent instanceof View) {
                ((View) parent).setBackgroundColor(backgroundColor);
            } else {
                imageView.setBackgroundColor(backgroundColor);
            }

            imageLoader.loadImageUsingResId(tile.getImageResourcesId(), true, imageView);
        }
    }
}

}

А вот как я настраиваю адаптер для RecyclerView:

TileAdapter tileAdapter = new TileAdapter(getActivity(), itemsList);
mRecyclerView.setAdapter(tileAdapter);

1 ответ

Моя проблема была решена путем замены файла BaseLayoutManager файла двухстороннего просмотра Lucasr, как указано здесь

Другие вопросы по тегам