ExpandablelistView+swipeLayout 滑动删除

使用AndroidSwipeLayout可以实现android列表滑动删除的效果,github上地址是AndroidSwipeLayout

因项目需要,在ExpandablelistView中加入左滑删除效果,网上搜索到一篇文章比较合适 ExpandableListView左滑删除

项目中实现的效果图
这里写图片描述
这里写图片描述
实现
1.首先在总布局中加入ExpandableListView,

<ExpandableListView
        android:id="@+id/elvFurnitureList"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:dividerHeight="0dp"
        android:divider="@null"/>

2.设计group布局,一个TextView,布局不写了
3.设计child布局,主要思想就是将child的布局换为swipelayout,然后在adpter中设置click事件。

<?xml version="1.0" encoding="utf-8"?>

<com.daimajia.swipe.SwipeLayout android:id="@+id/swipe"
                                xmlns:android="http://schemas.android.com/apk/res/android"
                                xmlns:app="http://schemas.android.com/apk/res-auto"
                                android:layout_width="wrap_content"
                                android:layout_height="match_parent"
                                app:clickToClose="true">

    <LinearLayout
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:background="@color/white"
        android:orientation="vertical"
        android:tag="Bottom2"
        >

        <View
            android:layout_width="match_parent"
            android:layout_height="0.5dp"
            android:background="#80d2d2d2"/>

        <LinearLayout
            android:layout_width="wrap_content"
            android:layout_height="0dp"
            android:layout_gravity="center"
            android:layout_weight="1"
            android:orientation="horizontal"
            >

            <LinearLayout
                android:id="@+id/llEdit"
                android:layout_width="75dp"
                android:layout_height="match_parent"
                android:gravity="center"
                android:padding="5dp">

                <TextView
                    android:layout_width="match_parent"
                    android:layout_height="40dp"
                    android:background="@drawable/shape_solid_blue_bg2"
                    android:gravity="center"
                    android:text="编辑"
                    android:textColor="@color/white"/>
            </LinearLayout>

            <LinearLayout
                android:id="@+id/llUnbind"
                android:layout_width="75dp"
                android:layout_height="match_parent"
                android:gravity="center"
                android:padding="5dp">

                <TextView
                    android:layout_width="match_parent"
                    android:layout_height="40dp"
                    android:background="@drawable/shape_solid_red_bg"
                    android:gravity="center"
                    android:text="解绑"
                    android:textColor="@color/white"/>
            </LinearLayout>
        </LinearLayout>
    </LinearLayout>


    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
                  android:layout_width="match_parent"
                  android:layout_height="wrap_content"
                  android:background="@color/white"
                  android:orientation="vertical">

        <LinearLayout
            android:id="@+id/llChildContent"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:gravity="center_vertical"
            android:orientation="vertical">

            <View
                android:layout_width="match_parent"
                android:layout_height="0.5dp"
                android:background="#80d2d2d2"/>

            <LinearLayout
                android:layout_width="match_parent"
                android:layout_height="70dp"
                android:gravity="center_vertical">

                <ImageView
                    android:id="@+id/ivChildImage"
                    android:layout_width="35dp"
                    android:layout_height="35dp"
                    android:layout_gravity="center_vertical"
                    android:layout_marginLeft="15dp"
                    android:layout_marginRight="15dp"/>


                <LinearLayout
                    android:layout_width="0dp"
                    android:layout_height="69dp"
                    android:layout_marginLeft="5dp"
                    android:layout_weight="1"
                    android:gravity="center_vertical"
                    android:orientation="vertical">

                    <LinearLayout
                        android:layout_width="wrap_content"
                        android:layout_height="30dp"
                        android:gravity="center_vertical">

                        <TextView
                            android:id="@+id/tvChildTitle"
                            android:layout_width="wrap_content"
                            android:layout_height="wrap_content"
                            android:text="单联灯"
                            android:textColor="#888888"
                            android:textSize="14sp"/>

                        <TextView
                            android:id="@+id/tvIsOnline"
                            android:layout_width="wrap_content"
                            android:layout_height="wrap_content"
                            android:gravity="center_vertical"
                            android:text="(在线)"
                            android:textColor="#128ce3"
                            android:textSize="14sp"/>
                    </LinearLayout>

                    <LinearLayout
                        android:layout_width="wrap_content"
                        android:layout_height="30dp"
                        android:gravity="center_vertical">

                        <TextView
                            android:layout_width="wrap_content"
                            android:layout_height="wrap_content"
                            android:gravity="center_vertical"
                            android:text="备注:"
                            android:textColor="#888888"
                            android:textSize="14sp"/>

                        <TextView
                            android:id="@+id/tvComment"
                            android:layout_width="wrap_content"
                            android:layout_height="wrap_content"
                            android:gravity="center_vertical"
                            android:text=""
                            android:textColor="#888888"
                            android:textSize="14sp"/>
                    </LinearLayout>
                </LinearLayout>


            </LinearLayout>
        </LinearLayout>

        <LinearLayout
            android:id="@+id/llChildButton"
            android:layout_width="match_parent"
            android:layout_height="60dp">

            <TextView
                android:id="@+id/tvAddNewDevice"
                android:layout_width="0dp"
                android:layout_height="match_parent"
                android:layout_weight="1"
                android:background="#21ad38"
                android:gravity="center"
                android:text="+添加新设备"
                android:textColor="@color/white"/>

            <TextView
                android:id="@+id/tvSelectExistDevice"
                android:layout_width="0dp"
                android:layout_height="match_parent"
                android:layout_weight="1"
                android:background="#00a0e9"
                android:gravity="center"
                android:text="选择已有设备"
                android:textColor="@color/white"/>
        </LinearLayout>

    </LinearLayout>
</com.daimajia.swipe.SwipeLayout>

注意先写 隐藏的那一层布局
相关的Adapter

public class FurnitureListAdapter extends BaseExpandableListAdapter{

    private List<Furniture> furnitureList = new ArrayList<>();
    private Context context;
    private LayoutInflater inflater;
    private SwipeLayout currentExpandedSwipeLayout;

    public FurnitureListAdapter(Context context, List<Furniture> furnitureList) {
        this.context = context;
        this.furnitureList = furnitureList;
        inflater = LayoutInflater.from(context);
    }

    public void setFurnitureList(List<Furniture> furnitureList) {
        this.furnitureList = furnitureList;
        L.e("FurnitureListAdapter furnitureList ===" + new Gson().toJson(furnitureList));
    }

    @Override
    public int getGroupCount() {
        return furnitureList.size();
    }

    @Override
    public int getChildrenCount(int groupPosition) {
        return furnitureList.get(groupPosition).getChildList().size();
    }

    @Override
    public Object getGroup(int groupPosition) {
        return furnitureList.get(groupPosition);
    }

    @Override
    public Object getChild(int groupPosition, int childPosition) {
        return furnitureList.get(groupPosition).getChildList().get(childPosition);
    }

    @Override
    public long getGroupId(int groupPosition) {
        return groupPosition;
    }

    @Override
    public long getChildId(int groupPosition, int childPosition) {
        return childPosition;
    }

    @Override
    public boolean hasStableIds() {
        return true;
    }

    @Override
    public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) {
        GroupHolder groupHolder;
        if(convertView == null) {
            groupHolder = new GroupHolder();
            convertView = inflater.inflate(R.layout.item_furniture_group, null);
            groupHolder.tvGroupName = (TextView) convertView.findViewById(R.id.tvGroupName);
            groupHolder.viewTop = convertView.findViewById(R.id.viewTop);
            convertView.setTag(groupHolder);
        } else {
            groupHolder = (GroupHolder) convertView.getTag();
        }

        if(groupPosition == 0) {
            groupHolder.viewTop.setVisibility(View.GONE);
        } else {
            groupHolder.viewTop.setVisibility(View.VISIBLE);
        }

        Furniture device = furnitureList.get(groupPosition);
        groupHolder.tvGroupName.setText(device.getGroupTitle());
        return convertView;
    }

    @Override
    public View getChildView(final int groupPosition, final int childPosition, boolean isLastChild, View convertView, ViewGroup parent) {
        ChildHolder childHolder;
        if(convertView == null) {
            childHolder = new ChildHolder();
            convertView = inflater.inflate(R.layout.item_furniture_child, null);
            childHolder.ivChildImage = (ImageView) convertView.findViewById(R.id.ivChildImage);
            childHolder.tvChildTitle = (TextView) convertView.findViewById(R.id.tvChildTitle);
            childHolder.tvIsOnline = (TextView) convertView.findViewById(R.id.tvIsOnline);
            childHolder.tvComment = (TextView) convertView.findViewById(R.id.tvComment);
            childHolder.tvAddNewDevice = (TextView) convertView.findViewById(R.id.tvAddNewDevice);
            childHolder.tvSelectExistDevice = (TextView) convertView.findViewById(R.id.tvSelectExistDevice);
            childHolder.llChildContent = (LinearLayout) convertView.findViewById(R.id.llChildContent);
            childHolder.llChildButton = (LinearLayout) convertView.findViewById(R.id.llChildButton);
            childHolder.llEdit = (LinearLayout) convertView.findViewById(R.id.llEdit);
            childHolder.llUnbind = (LinearLayout) convertView.findViewById(R.id.llUnbind);
            //滑动
            childHolder.mSwipeLayout = (SwipeLayout) convertView.findViewById(R.id.swipe);
            childHolder.mSwipeLayout.setShowMode(SwipeLayout.ShowMode.PullOut);
            childHolder.mSwipeLayout.addDrag(SwipeLayout.DragEdge.Right, childHolder.mSwipeLayout.findViewWithTag("Bottom2"));
            convertView.setTag(childHolder);
        } else {
            childHolder = (ChildHolder) convertView.getTag();
        }

        final FurnitureChild child = furnitureList.get(groupPosition).getChildList().get(childPosition);
        if (child.isData()) {
            childHolder.llChildContent.setVisibility(View.VISIBLE);
            childHolder.llChildButton.setVisibility(View.GONE);
            childHolder.ivChildImage.setImageResource(child.getResId());
            childHolder.tvChildTitle.setText(child.getChildTitle());
            childHolder.tvComment.setText(child.getComment());
            if(child.isOnline()) {
                childHolder.tvIsOnline.setTextColor(Color.parseColor("#128ce3"));
            } else {
                childHolder.tvIsOnline.setTextColor(Color.parseColor("#888888"));
            }

            childHolder.llEdit.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    L.e("FurnitureListAdapter child llEdit===" + new Gson().toJson(child));
                    FurnitureListActivity.instance.editDevice(child.getAreaId(), child.getAreaName(), child.getDevice());
                }
            });

            childHolder.llUnbind.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    L.e("FurnitureListAdapter child llUnbind===" + new Gson().toJson(child));
                    FurnitureListActivity.instance.dismissDevice(child.getDevice());
                }
            });
        } else {
            childHolder.llChildContent.setVisibility(View.GONE);
            childHolder.llChildButton.setVisibility(View.VISIBLE);
            childHolder.tvAddNewDevice.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    FurnitureListActivity.instance.addDevice(child.getAreaId(), child.getAreaName());
                }
            });
            childHolder.tvSelectExistDevice.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
//                    context.startActivity(new Intent(context, AlreadyHadDeviceActivity.class));
                    FurnitureListActivity.instance.selectExistDevice(child.getAreaId(), child.getAreaName());
                }
            });


        }

        childHolder.mSwipeLayout.addSwipeListener(new SwipeLayout.SwipeListener() {
            @Override
            public void onStartOpen(SwipeLayout layout) {
                if (currentExpandedSwipeLayout != null&&currentExpandedSwipeLayout!=layout)
                    currentExpandedSwipeLayout.close(true);

            }

            @Override
            public void onOpen(SwipeLayout layout) {
                currentExpandedSwipeLayout = layout;


            }

            @Override
            public void onStartClose(SwipeLayout layout) {

            }

            @Override
            public void onClose(SwipeLayout layout) {
            }

            @Override
            public void onUpdate(SwipeLayout layout, int leftOffset, int topOffset) {

            }

            @Override
            public void onHandRelease(SwipeLayout layout, float xvel, float yvel) {

            }
        });

        return convertView;
    }


//    public interface ClickResultListener{
//        void ClickResult(int tag,int childPosition);
//    }
    @Override
    public boolean isChildSelectable(int groupPosition, int childPosition) {
        return true;
    }

    class GroupHolder {
        public TextView tvGroupName;
        public View viewTop;
    }

    class ChildHolder {
        public ImageView ivChildImage;
        public TextView tvChildTitle;
        public TextView tvIsOnline;
        public TextView tvComment;
        public TextView tvAddNewDevice;
        public TextView tvSelectExistDevice;
        public LinearLayout llChildContent;
        public LinearLayout llChildButton;
        public LinearLayout llEdit;
        public LinearLayout llUnbind;

        public SwipeLayout mSwipeLayout;
    }
}

重点是关于 childHolder.mSwipeLayout的操作

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值