超级吊的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); }}
阅读全文
0 0
- 超级吊的ExpandableListView三级目录
- ExpandableListView三级列表的实现
- android ExpandableListView三级菜单的使用
- android ExpandableListView三级菜单的使用
- 二级目录ExpandableListView的用法
- ExpandableListview的三级列表的数据加载及刷新
- ExpandableListView使用解析(三级列表的实现)
- 开发支持三级目录的导航菜单
- Android之用 ExpandableListView使用解析(三级列表的实现)
- android 用ExpandableListView实现的文件目录树框架
- android中用ExpandableListView实现三级扩展列表
- ExpandableListView多及列表(三级列表)
- 超级详细的android目录说明
- 一个三级目录菜单
- Python编写三级目录
- php的foreach的方法生成三级目录
- FTP的存储目录为什么要设定三级呢?
- Android ExpandableListView双层嵌套实现三级树形菜单
- 多台web服务器之间共享Session
- redis发布、订阅
- java字符串的替换replace、replaceAll、replaceFirst的区别详解
- Ubuntu 交叉编译 OpenSSL,并在 Android 中使用
- 协同过滤推荐算法详解
- 超级吊的ExpandableListView三级目录
- HI3520D音频
- vue入门
- 如何给webApp应用添加动态水印?并且不影响页面的交互事件
- securecrt 远程映射端口
- 高准确率声学模型基于决策树的状态聚类
- JavaScript中对Object.defineProperty 函数 的理解
- Go语言简单源代码剖析
- Android 23以下 checkSelfPermission 失败记录