ExpandableListView 和SwipeLayout

2018-01-26  本文已影响0人  荣智超

ExpandableListView 可以实现双层列表效果。而且代码量不多,比较简单实用。

private Map> dataset = new HashMap>();

    private ArrayList parentList;

    private ArrayList childList;

    public void initDatas() {

        String mac;

        parentList = new ArrayList();

        parentList.add("343");

        parentList.add("979");

        initDataSet();

    }

    public void initDataSet() {

        dataset.clear();

        for (String info : parentList) {

            childList = new ArrayList();

            childList.add("17771861240");

            childList.add("17771861241");

            dataset.put(info, childList);

        }

    }

//初始化数据,每个parent对应一个childList,所以数据用HashMap  保存。主要就是Adapter 中的代码实现。

private SwipeLayout currentExpandedSwipeLayout;

    BaseExpandableListAdapter expandAdapter = new BaseExpandableListAdapter() {

        @Override

        public int getGroupCount() {

            return dataset.size();

        }

        @Override

        public int getChildrenCount(int groupPosition) {

            if (dataset.get(parentList.get(groupPosition)) == null) {

                return 0;

            }

            return dataset.get(parentList.get(groupPosition)).size();

        }

        @Override

        public Object getGroup(int groupPosition) {

            return parentList.get(groupPosition);

        }

        @Override

        public Object getChild(int groupPosition, int childPosition) {

            return dataset.get(parentList.get(groupPosition)).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 false;

        }

//实现GroupView ,isExpanded GroupView 是否展开,因为在ExpandableListView 中展开的图标是默认在左边,所以我们要去掉默认的,然后自己定义一个,根据IsExpanded 来设置图标。setGroupIndicator(null) ,去掉默认的。

        @Override

        public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) {

            if (convertView == null) {

                convertView = LayoutInflater.from(AccountManagerActivity.this).inflate(R.layout.group_layout, null);

            }

            convertView.setTag(R.layout.group_layout, groupPosition);

            convertView.setTag(R.layout.expandlist_item, -1);

            TextView text = (TextView) convertView.findViewById(R.id.group_title);

            text.setText(parentList.get(groupPosition));

            ImageView img = (ImageView) convertView.findViewById(R.id.group_img);

            if (isExpanded) {

                img.setBackgroundResource(R.drawable.icon_detail_down_button);

            } else {

                img.setBackgroundResource(R.drawable.icon_detail_pull_button);

            }

            return convertView;

        }

        @Override

        public View getChildView(final int groupPosition, final int childPosition, boolean isLastChild, View convertView, ViewGroup parent) {

            if (convertView == null) {

                convertView = LayoutInflater.from(AccountManagerActivity.this).inflate(R.layout.expandlist_item, null);

            }

            convertView.setTag(R.layout.group_layout, groupPosition);

            convertView.setTag(R.layout.expandlist_item, childPosition);

            TextView tv_num = (TextView) convertView.findViewById(R.id.tv_num);

            TextView tv_name = (TextView) convertView.findViewById(R.id.tv_name);

            Button btn_delete = (Button) convertView.findViewById(R.id.ib_delete);

            final SwipeLayout child = (SwipeLayout) convertView.findViewById(R.id.child);

            tv_num.setText(getText(R.string.normal_user).toString() + (childPosition + 1));

            final String phone = dataset.get(parentList.get(groupPosition)).get(childPosition);

            tv_name.setText(phone);

            //设置SwipeLayout  的模式。       

            child.setShowMode(SwipeLayout.ShowMode.PullOut);

            //设置SwipeLayout 的模式。

            child.setShowMode(SwipeLayout.ShowMode.PullOut);

            //设置需要滑动出现的布局,要在XML 中给该布局加上TAG

            child.addDrag(SwipeLayout.DragEdge.Right, child.findViewWithTag("button"));

            child.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) {

                }

            });

}
上一篇下一篇

猜你喜欢

热点阅读