GridView网格布局实现对组件的增删

GridView是一个在二维可滚动的网格中展示内容的控件。网格中的内容通过使用adapter自动插入到布局中。
 在这里插入图片描述
 在这里插入图片描述
 一、MainActivity
 该类有几个重要的点

  1. 数据加载
	private void getData() {
        mUsers = new ArrayList<>();
        EQ_Fault eq_fault1 = new EQ_Fault("1","111","a","b","c","d",true);
        EQ_Fault eq_fault2 = new EQ_Fault("2","222","a","b","c","d",true);
        EQ_Fault eq_fault3 = new EQ_Fault("3","333","a","b","c","d",true);
        EQ_Fault eq_fault4 = new EQ_Fault("4","444","a","b","c","d",true);
        EQ_Fault eq_fault5 = new EQ_Fault("5","555","a","b","c","d",true);
        mUsers.add(eq_fault1);
        mUsers.add(eq_fault2);
        mUsers.add(eq_fault3);
        mUsers.add(eq_fault4);
        mUsers.add(eq_fault5);
        //刷新适配器
        gridviewAdapter.refresh(mUsers);
    }
  1. 初始化适配器,同时设置操作模式
private void initGridview() {
        //设置操作模式
        Boolean isOperation = true;

        gridviewAdapter = new Gridview_Adapter(this,isOperation,mOnGridviewListener);

        gv_gridview.setAdapter(gridviewAdapter);
    }
  1. 初始化触碰单击事件:实现组件显示和隐藏
@SuppressLint("ClickableViewAccessibility")
    private void initListener() {
        gv_gridview.setOnTouchListener(new View.OnTouchListener() {
            @Override
            public boolean onTouch(View view, MotionEvent motionEvent) {
                switch (motionEvent.getAction()){
                    case MotionEvent.ACTION_DOWN:
                        //判断当前是否是删除模式,如果是删除模式
                        if (gridviewAdapter.ismIsDeleteModel()){
                            //切换为非删除模式
                            gridviewAdapter.setmIsDeleteModel(false);

                            //刷新页面
                            gridviewAdapter.notifyDataSetChanged();
                        }
                        break;
                }
                return false;
            }
        });
    }

二、Gridview_Adapter

  1. 加减号的组件添加
    原理:首先添加“减号”(相当于放在0号位置),其次在0号位添加“加号”(相当于把减号位从0号位往右挤),从而达到我们想要的效果。

在这里插入图片描述

	private void initUsers() {
        EQ_Fault add = new EQ_Fault("add");
        EQ_Fault delete = new EQ_Fault("delete");
        mUsers.add(delete);
        mUsers.add(0,add);
    }
  1. 加减号的逻辑处理:有点绕,但理解了都是很简单的关系
	final EQ_Fault user = mUsers.get(position);
        if (mIsOperation){//可操作
            if (position == ()-1){//减号的处理
                /**
                 * 如果已经是删除模式,将减号隐藏,其他组件正常显示
                 */
                if (mIsDeleteModel){
                    view.setVisibility(View.INVISIBLE);//隐藏减号
                }else {
                    view.setVisibility(View.VISIBLE);
                    /**
                     * View.VISIBLE--->可见
                     * View.INVISIBLE--->不可见,但这个View仍然会占用在xml文件中所分配的布局空间,不重新layout
                     * View.GONE---->不可见,但这个View在ViewGroup中不保留位置,会重新layout,不再占用空间,那后面的view就会取代他的位置
                     */
                    viewHolder.iv_eq_photo.setImageResource(R.drawable.em_smiley_minus_btn_pressed);
                    viewHolder.iv_eq_delete.setVisibility(View.GONE);
                    viewHolder.tv_eq_name.setVisibility(View.INVISIBLE);
                }
            }else if (position == getCount()-2){//加号的处理
                /**
                 * 如果已经是删除模式,将加号隐藏,其他组件正常显示
                 */
                //删除模式判断
                if (mIsDeleteModel){
                    view.setVisibility(View.INVISIBLE);
                }else {
                    view.setVisibility(View.VISIBLE);
                    viewHolder.iv_eq_photo.setImageResource(R.drawable.em_smiley_add_btn_pressed);
                    viewHolder.iv_eq_delete.setVisibility(View.GONE);
                    viewHolder.tv_eq_name.setVisibility(View.INVISIBLE);
                }
            }else   {
                view.setVisibility(View.VISIBLE);
                viewHolder.tv_eq_name.setVisibility(View.VISIBLE);

                viewHolder.tv_eq_name.setText(user.getEq_fault_id());
                viewHolder.iv_eq_photo.setImageResource(R.drawable.eq);
                if (mIsDeleteModel){
                    viewHolder.iv_eq_delete.setVisibility(View.VISIBLE);
                }else {
                    viewHolder.iv_eq_delete.setVisibility(View.GONE);
                }
            }

            //点击事件的处理
            if (position == getCount() -1){//减号
                viewHolder.iv_eq_photo.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View view) {
                        if (!mIsDeleteModel){//如果不是删除模式
                            //设置为删除模式
                            mIsDeleteModel = true;
                            //刷新页面
                            notifyDataSetChanged();
                        }
                    }
                });
            }else if (position == getCount() -2){//加号
                viewHolder.iv_eq_photo.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View view) {
                        monGridviewListener.onAddMembers();
                    }
                });
            }else {
                viewHolder.iv_eq_delete.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View view) {
                        monGridviewListener.onDeleteMember(user);
                    }
                });
            }
        }else {//不可操作模式
            if (position == getCount() -1 || position == getCount() - 2){
                view.setVisibility(View.GONE);//隐藏加号和减号
            }else {
                view.setVisibility(View.VISIBLE);//其他组件显示

                //名称
                viewHolder.tv_eq_name.setText(user.getEq_fault_id());
                //头像
                viewHolder.iv_eq_photo.setImageResource(R.drawable.eq);
                //删除
                viewHolder.iv_eq_delete.setVisibility(View.GONE);
            }
        }

最后上完整代码:gitee传送门

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值