Проблемы с динамическими представлениями внутри представления ресайклера

Я использую представление recycler, чтобы показать список элементов, который содержит сетку изображений. Макет сетки динамически добавляется к элементу списка внутри метода onBindViewHolder в адаптере просмотра ресайклера. Теперь проблема в том, что представления макета сетки воссоздаются при каждой прокрутке. Я не хочу, чтобы эти представления воссоздавались при прокрутке. Как с этим бороться??

Вот фрагмент кода

 @Override
    public void onBindViewHolder(final PersonViewHolder personViewHolder, final int i) {

                GridLayout feedGrid = new GridLayout(context);
                LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(dipToPixels(context,HomePage.SCREEN_WIDTH),dipToPixels(context,HomePage.SCREEN_WIDTH));
                feedGrid.setLayoutParams(layoutParams);
                feedGrid.setColumnCount(1);

                imgArr = new ImageView[num];
                imgArr[0] = new ImageView(context);
                GridLayout.Spec row = GridLayout.spec(0, 1);
                GridLayout.Spec colspan = GridLayout.spec(0, 1);
                GridLayout.LayoutParams gridLayoutParam = new GridLayout.LayoutParams(row, colspan);
                gridLayoutParam.setGravity(Gravity.FILL);

                    Picasso.with(context).load(urlArr.get(0)).error(mDrawable).placeholder(mDrawable).into(imgArr[0], new Callback() {
                        @Override
                        public void onSuccess() {
                            personViewHolder.feedGridLayout.setVisibility(View.VISIBLE);
                            personViewHolder.loadImg.setVisibility(View.GONE);
                        }

                        @Override
                        public void onError() {
                            personViewHolder.feedGridLayout.setVisibility(View.GONE);
                            personViewHolder.loadImg.setVisibility(View.VISIBLE);

                        }

                    });



                feedGrid.addView(imgArr[0], gridLayoutParam);

                personViewHolder.feedGridLayout.removeAllViews();

                personViewHolder.feedGridLayout.addView(feedGrid);

}

person Manu    schedule 16.10.2015    source источник
comment
Могу ли я узнать, почему за это проголосовали???   -  person Manu    schedule 16.10.2015


Ответы (1)


Вот как я решил очень похожую проблему.

В вашем адаптере вы переопределяете onViewRecycled и удаляете представления вашего gridLayout вместо onBindViewHolder.

@Override
    public void onViewRecycled(PersonViewHolder personViewHolder) {
        super.onViewRecycled(personViewHolder);
        personViewHolder.feedGridLayout.removeAllViews();
    }

Удалите personViewHolder.feedGridLayout.removeAllViews(); из вашего onBindViewHolder.

Дайте мне знать, если это исправит это.

person Daniel Julio    schedule 16.10.2015
comment
это заставляет recyclerview зависать - person Jemshit Iskenderov; 24.06.2016