回收站视图中的动态视图问题

Man*_*anu 5 android android-gridlayout recycler-adapter android-recyclerview

我正在使用回收站视图来显示包含图像网格布局的项目列表.网格布局动态添加到回收器视图适配器上"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);

}
Run Code Online (Sandbox Code Playgroud)

Dan*_*lio 0

这就是我解决一个非常相似的问题的方法。

在您的适配器中,您覆盖 onViewRecycled 并删除 gridLayout 的视图,而不是 onBindViewHolder。

@Override
    public void onViewRecycled(PersonViewHolder personViewHolder) {
        super.onViewRecycled(personViewHolder);
        personViewHolder.feedGridLayout.removeAllViews();
    }
Run Code Online (Sandbox Code Playgroud)

personViewHolder.feedGridLayout.removeAllViews();从 onBindViewHolder 中删除。

让我知道是否可以解决问题。