超级吊的ExpandableListView三级目录

来源:互联网 发布:deepin linux安装g 编辑:程序博客网 时间:2024/06/11 07:49

MainActivity:

public class MainActivityTest extends Activity {    private ExpandableListView expandableListView;    private List<String>grounpList=new ArrayList<>();    private ParentExpandAdapter parentExpandAdapter;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main_test);        initdata();        initview();    }    private void initdata() {        for (int i=0;i<10;i++){            grounpList.add("这是菜单"+(1+i));        }    }    private void initview() {        expandableListView=(ExpandableListView)findViewById(R.id.List);        parentExpandAdapter=new ParentExpandAdapter(MainActivityTest.this,grounpList);        expandableListView.setAdapter(parentExpandAdapter);        expandableListView.setOnGroupExpandListener(new ExpandableListView.OnGroupExpandListener() {            @Override            public void onGroupExpand(int groupPosition) {                for(int i=0;i<parentExpandAdapter.getGroupCount();i++){                    if(i != groupPosition){                        expandableListView.collapseGroup(i);                    }                }            }        });    }}

MainActivity.xml:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:app="http://schemas.android.com/apk/res-auto"    xmlns:tools="http://schemas.android.com/tools"    android:layout_width="match_parent"    android:layout_height="match_parent"    android:paddingBottom="@dimen/activity_vertical_margin"    android:paddingLeft="@dimen/activity_horizontal_margin"    android:paddingRight="@dimen/activity_horizontal_margin"    android:paddingTop="@dimen/activity_vertical_margin"    tools:context="com.fae.mobile.activity.MainActivityTest"><ExpandableListView    android:layout_width="match_parent"    android:layout_height="match_parent"    android:id="@+id/List"    android:groupIndicator="@null"    android:scrollbars="none"></ExpandableListView></RelativeLayout>

ParentExpandAdapter:

public class ParentExpandAdapter extends BaseExpandableListAdapter {    private Context context;    private List<String>parentList;    public ParentExpandAdapter(Context context,List<String>parentList){        this.context=context;        this.parentList=parentList;    }    @Override    public int getGroupCount() {        return parentList.size();    }    @Override    public int getChildrenCount(int groupPosition) {        return 1;    }    @Override    public Object getGroup(int groupPosition) {        return parentList.get(groupPosition);    }    @Override    public Object getChild(int groupPosition, int childPosition) {        return parentList.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) {        ParentViewHolder parentViewHolder;        if(convertView==null){            parentViewHolder=new ParentViewHolder();            convertView=View.inflate(context, R.layout.grounplayout,null);            parentViewHolder.textViewtv=(TextView)convertView.findViewById(R.id.parentGroupTV);            parentViewHolder.imageViewtv=(ImageView)convertView.findViewById(R.id.iv_parent_group_indicator);            convertView.setTag(parentViewHolder);        }        else {           parentViewHolder=(ParentViewHolder)convertView.getTag();        }        parentViewHolder.textViewtv.setText(parentList.get(groupPosition));        if (isExpanded) {            parentViewHolder.imageViewtv.setImageResource(R.drawable.a_1);        } else {            parentViewHolder.imageViewtv.setImageResource(R.drawable.abc_ic_voice_search_api_mtrl_alpha);        }        return convertView;    }    @Override    public View getChildView(int groupPosition, int childPosition, boolean isLastChild, View convertView, ViewGroup parent) {       final ChildViewHolder childViewHolder;        if(convertView==null){            childViewHolder=new ChildViewHolder();            convertView=View.inflate(context,R.layout.item_expand_group_child,null);            childViewHolder.childExpandLv=(ExpandableListView)convertView.findViewById(R.id.expand_group_item);            convertView.setTag(childViewHolder);        }        else {            childViewHolder=(ChildViewHolder)convertView.getTag();        }        final ChildExpandAdapter childExpandAdapter = new ChildExpandAdapter(context, parentList.subList(0, 10)        );        childViewHolder.childExpandLv.setAdapter(childExpandAdapter);        childViewHolder.childExpandLv.setOnGroupExpandListener(new ExpandableListView.OnGroupExpandListener() {            @Override            public void onGroupExpand(int groupPosition) {                for (int i = 0; i < childExpandAdapter.getGroupCount(); i++) {                    if (i != groupPosition) {                        childViewHolder.childExpandLv.collapseGroup(i);                    }                }            }        });        return convertView;    }    @Override    public boolean isChildSelectable(int groupPosition, int childPosition) {        return true;    }    class ParentViewHolder{        TextView textViewtv;        ImageView imageViewtv;    }    class ChildViewHolder{        ExpandableListView childExpandLv;    }}

grounplayout.xml:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:layout_width="match_parent"    android:layout_height="35dp"    android:background="#eff0f2"    android:paddingLeft="10dp">    <TextView        android:layout_marginLeft="20dp"        android:id="@+id/parentGroupTV"        android:layout_width="wrap_content"        android:layout_height="50dp"        android:gravity="center_vertical"        android:textColor="#0061b2"        android:textSize="16sp" />    <ImageView        android:id="@+id/iv_parent_group_indicator"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:layout_centerVertical="true"        android:layout_toRightOf="@id/parentGroupTV"        android:layout_marginLeft="10dp"/></RelativeLayout>

item_expand_group_child.xml:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:layout_width="match_parent"    android:layout_height="match_parent">   <com.fae.mobile.activity.CustomExpandableListView        android:id="@+id/expand_group_item"        android:layout_width="match_parent"        android:layout_height="match_parent"        android:groupIndicator="@null"        android:scrollbars="none"/></RelativeLayout>

ChildExpandAdapter:

public class ChildExpandAdapter extends BaseExpandableListAdapter {    private Context context;    private List<String>parentList;    public ChildExpandAdapter(Context context,List<String>parentList){        this.context=context;        this.parentList=parentList;    }    @Override    public int getGroupCount() {        return parentList.size();    }    @Override    public int getChildrenCount(int groupPosition) {        return 1;    }    @Override    public Object getGroup(int groupPosition) {        return parentList.get(groupPosition);    }    @Override    public Object getChild(int groupPosition, int childPosition) {        return parentList.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;    }    @Override    public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) {        ParentViewHolder parentHolder;        if (null == convertView) {            parentHolder = new ParentViewHolder();            convertView = View.inflate(context, R.layout.fire_tab_child_group_item, null);            parentHolder.parentTv = (TextView) convertView.findViewById(R.id.childGroupTV);            parentHolder.parentIv = (ImageView) convertView.findViewById(R.id.iv_fire_tab_child_indicator);            convertView.setTag(parentHolder);        } else {            parentHolder = (ParentViewHolder) convertView.getTag();        }        parentHolder.parentTv.setText(parentList.get(groupPosition));        if (isExpanded) {            parentHolder.parentIv.setImageResource(R.drawable.a_1);        } else {            parentHolder.parentIv.setImageResource(R.drawable.abc_ic_voice_search_api_mtrl_alpha);        }        return convertView;    }    @Override    public View getChildView(int groupPosition, int childPosition, boolean isLastChild, View convertView, ViewGroup parent) {        ChildViewHolder childHolder;        if (null == convertView) {            childHolder = new ChildViewHolder();            convertView = View.inflate(context, R.layout.item_child_child, null);            childHolder.gridView = (GridView) convertView.findViewById(R.id.gv_child_child_item);            convertView.setTag(childHolder);        } else {            childHolder = (ChildViewHolder) convertView.getTag();        }        childHolder.gridView.setAdapter(new GridViewAdapter(context, getList()));        childHolder.gridView.setOnItemClickListener(new AdapterView.OnItemClickListener() {            @Override            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {                Toast.makeText(context, "GridView - " + position, Toast.LENGTH_SHORT).show();            }        });        return convertView;    }    @Override    public boolean isChildSelectable(int groupPosition, int childPosition) {        return true;    }    class ParentViewHolder {        TextView parentTv;        ImageView parentIv;    }    class ChildViewHolder {        GridView gridView;    }    private List<String> getList() {        List<String> list = new ArrayList<>();        for (int i = 0; i < 50; i++) {            list.add("And " + i);        }        return list;    }}

fire_tab_child_group_item.xml:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:layout_width="match_parent"    android:layout_height="30dp">    <TextView        android:layout_marginLeft="20dp"        android:id="@+id/childGroupTV"        android:layout_width="match_parent"        android:layout_height="40dp"        android:layout_centerVertical="true"        android:gravity="center_vertical"        android:paddingLeft="10dp"        android:text="数码"        android:textColor="#262626"        android:textSize="14sp" />    <ImageView        android:id="@+id/iv_fire_tab_child_indicator"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:layout_alignParentRight="true"        android:layout_centerVertical="true"        android:layout_marginRight="10dp"        android:src="@drawable/abc_list_selector_disabled_holo_dark" /></RelativeLayout>

item_addtab_grid.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="wrap_content"android:layout_height="match_parent"><RelativeLayout    android:id="@+id/rl_addtab_grid_item"    android:layout_width="100dp"    android:layout_height="35dp">    <TextView        android:id="@+id/tv_add_item_tab_name"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:layout_centerInParent="true"        android:text="热点"        android:textColor="#40ff00"        android:textSize="14sp" /></RelativeLayout></RelativeLayout>

item_child_child.xml:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:layout_width="match_parent"    android:layout_height="match_parent"    android:orientation="vertical"    android:padding="10dp">    <com.fae.mobile.activity.CustomGridView        android:id="@+id/gv_child_child_item"        android:layout_width="match_parent"        android:layout_height="match_parent"        android:layout_margin="10dp"        android:horizontalSpacing="15dp"        android:numColumns="4"        android:scrollbars="none"        android:verticalSpacing="10dp"/></LinearLayout>

GridViewAdapter:

public class GridViewAdapter extends BaseAdapter {        private Context context;        private List<String> list;        public GridViewAdapter(Context context, List<String> list) {            this.context = context;            this.list = list;        }        @Override        public int getCount() {            return list.size();        }        @Override        public Object getItem(int i) {            return list.get(i);        }        @Override        public long getItemId(int i) {            return i;        }        @Override        public View getView(int i, View view, ViewGroup viewGroup) {            ViewHolder holder;            if (null == view) {                holder = new ViewHolder();                view = View.inflate(context, R.layout.item_addtab_grid, null);                holder.textView = (TextView) view.findViewById(R.id.tv_add_item_tab_name);                view.setTag(holder);            } else {                holder = (ViewHolder) view.getTag();            }            holder.textView.setText(list.get(i));            return view;        }        class ViewHolder {            TextView textView;        }    }

自定义ExpandableListView:

public class CustomExpandableListView extends ExpandableListView {    public CustomExpandableListView(Context context) {        super(context);    }    public CustomExpandableListView(Context context, AttributeSet attrs, int defStyleAttr) {        super(context, attrs, defStyleAttr);    }    public CustomExpandableListView(Context context, AttributeSet attrs) {        super(context, attrs);    }    @Override    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {        int expandSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2                , MeasureSpec.AT_MOST);        super.onMeasure(widthMeasureSpec, expandSpec);    }}

自定义GridView:

public class CustomGridView extends GridView{        public CustomGridView(Context context, AttributeSet attrs, int defStyle) {            super(context, attrs, defStyle);        }        public CustomGridView(Context context, AttributeSet attrs) {            super(context, attrs);        }        public CustomGridView(Context context) {            super(context);        }        @Override        protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {            int expandSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2,                    MeasureSpec.AT_MOST);            super.onMeasure(widthMeasureSpec, expandSpec);        }}

这里写图片描述

原创粉丝点击