all-base-adapter icon indicating copy to clipboard operation
all-base-adapter copied to clipboard

问下张神有没有考虑在ViewGroupUtils提供移除view的方法?已经有了添加的方法了

Open MasterWangBo opened this issue 8 years ago • 7 comments

在写一个能动态增删item的界面,因为里面有ScrollView,所以使用的是LinearLayout的实现方案,不知道能不能添加一个删除的方法?

MasterWangBo avatar Apr 19 '17 06:04 MasterWangBo

我目前做的删除 都是通过修改数据体 刷新界面 去实现,相当于重新为ViewGroup add View。 想想ListView、RecyclerView也是如此, 如果你觉得这样不好的话,你希望以哪种形式去使用去删除View?指定下标 顺序?还是?

mcxtzhang avatar Apr 19 '17 13:04 mcxtzhang

我今天在做这块需求的时候也是通过把数组中的数据删除掉再重新通过addViews方法添加进去的,看了下你你的实现方式,感觉就实用度而言和ListView那种可以直接通过position来删除某个view您觉得如何?

MasterWangBo avatar Apr 19 '17 13:04 MasterWangBo

你想一下 这本身是一个ViewGroup,已经提供了提供positon删除View的方法啦。

mcxtzhang avatar Apr 20 '17 01:04 mcxtzhang

ViewGroup.removeViewAt(index)

mcxtzhang avatar Apr 20 '17 01:04 mcxtzhang

原来是这样!谢谢张神!

MasterWangBo avatar Apr 20 '17 02:04 MasterWangBo

张神,我今天在试验删除view方法时发现了这么个一个问题,不知道是不是我使用问题,我的需求是点击item就会删除掉哪个item,所以我在item的点击事件中加入了如下代码

datas.remove(position);// 删除当前这条item所在数组中的数据
ViewGroupUtils.addViews(view_ll, adapter, onItemClickListener);// 重新填充界面达到刷新的目的

于是就会出现这么一个情况,当前界面item数量有6个,我先点击第6个item,顺利删除了,此时界面还有5个item,这时点击界面上任意一条item的position都已经乱了,随之就会发生数组越界异常,但如果item数量小于6个,什么问题都不会发生,debug跟了一下代码,觉得是addViews方法中的

if (null != onItemClickListener && !itemView.isClickable()) {
               final int finalI = i;
               itemView.setOnClickListener(new View.OnClickListener() {
                   @Override
                   public void onClick(View view) {
                       onItemClickListener.onItemClick(viewGroup, view, finalI);
                   }
               });
           }

出了问题,把这个判断条件注释掉后就没有此问题发生了

MasterWangBo avatar Apr 20 '17 08:04 MasterWangBo

我已经修复这个bug,以后刷新界面 建议使用:

        final SingleAdapter adapter1 = new SingleAdapter<K50Bean>(this, mDatas, R.layout.item_50k) {
            @Override
            public void onBindViewHolder(ViewGroup parent, ViewHolder holder, K50Bean data, int pos) {
                holder.setText(R.id.tv, data.getName());
            }
        };

        //单一ItemView
        //ViewGroupUtils.addViews(llCurrent, adapter1);
        final VGUtil vgUtil = new VGUtil(llCurrent, adapter1, new OnItemClickListener() {
            @Override
            public void onItemClick(ViewGroup parent, View itemView, int position) {
                Toast.makeText(LinearLayoutActivity.this, "position:" + position + "被删除了", Toast.LENGTH_SHORT).show();
                mDatas.remove(position);
                adapter1.notifyDatasetChanged();
            }
        });
        vgUtil.bind();

这种方式 adapter1.notifyDatasetChanged();去做

mcxtzhang avatar Apr 26 '17 12:04 mcxtzhang