android_ExpandableListView
来源:互联网 发布:csol抽奖软件 编辑:程序博客网 时间:2024/06/04 01:38
简单介绍:
ExpandableListView是ListView的子类,
这个类,主要的使用场景就是,当条目下面还有子条目。这个时候,就是用ExpandableListView来操作。
第一步:页面布局
<ExpandableListView android:groupIndicator="@null" android:id="@+id/commnumber_elv" android:layout_width="match_parent" android:layout_height="match_parent" > </ExpandableListView> /**groupIndicator属性,是用来控制,主条目,是否会显示下拉的箭头。不让其显示就赋值为@null*/
Activity中的代码
public class MainActivity extends Activity implements OnChildClickListener, OnGroupClickListener { private ExpandableListView mElv; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //准备数据 //组的数据 String[] group=new String[]{"组1","组2","组3","组4","组5"}; //一个组下面有多个条目 String[] item1=new String[]{"子1","子1","子1","子1","子1","子1","子1","子1"}; String[] item2=new String[]{"子2","子2","子2","子2","子2","子2","子2","子2","子2","子2","子2","子2","子2","子2","子2","子2"}; String[] item3=new String[]{"子3","子3","子3","子3","子3","子3","子3","子3","子3","子3","子3","子3","子3","子3","子3","子3"}; String[] item4=new String[]{"子4","子4","子4","子4","子4","子4","子4","子4"}; String[] item5=new String[]{"子5","子5","子5","子5","子5","子5","子5","子5"}; //把子的数据,往集合里面添加 List<String[]> list=new ArrayList<String[]>(); list.add(item1); list.add(item2); list.add(item3); list.add(item4); list.add(item5); mElv = (ExpandableListView) findViewById(R.id.elv); mElv.setAdapter(new ExableAdapter(this,group,list)); mElv.setOnChildClickListener(this);//监听子条目被点击 mElv.setOnGroupClickListener(this);//监听组被点击了 } @Override public boolean onChildClick(ExpandableListView parent, View v, int groupPosition, int childPosition, long id) { Log.d("tag", "子条目被点击了"); return true; } int mCurrenPosition=-1;//当前没有任何的组展开 @Override public boolean onGroupClick(ExpandableListView parent, View v, int groupPosition, long id) { if(mCurrenPosition==-1){//表示当前没有任何的组展开 mElv.expandGroup(groupPosition); mCurrenPosition=groupPosition; }else{ if(mCurrenPosition==groupPosition){//2次点击的是相同的组 mElv.collapseGroup(groupPosition); mCurrenPosition=-1; }else{//如果2次点击的条目不一致,就关闭以前的组,展开现在点击的组,并且置顶 //关闭组 mElv.collapseGroup(mCurrenPosition); //展开组 mElv.expandGroup(groupPosition); //选择置顶的组 mElv.setSelectedGroup(groupPosition); mCurrenPosition=groupPosition; } } /** * performClick view * expandableListView 的条目点击实际上就是父亲里面有一个方法处理 performItemClick * */ //返回值 true: 关于组的点击效果,只会执行我们这里的逻辑,系统默认的逻辑,再也不会执行了。 //false: 代表的是,这个组的点击,除了处理我们自己写的逻辑之外,还会处理父亲中的组展开和关闭的逻辑,所以 //有可能在界面上看到重复的效果,或者是某一个组并没有移动到最顶上位置 return true; } }
ExableAdapter
public class ExableAdapter extends BaseExpandableListAdapter { Context context; String[] group; List<String[]> allItem; public ExableAdapter(Context context, String[] group, List<String[]> item) { this.context = context; this.group = group; this.allItem = item; } // 组有多少条目 @Override public int getGroupCount() { return group.length; } // 子条目有多少条 @Override public int getChildrenCount(int groupPosition) { return allItem.get(groupPosition).length; } // 显示组的View @Override public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) { TextView tv = new TextView(context); String value = group[groupPosition]; tv.setTextSize(18); tv.setBackgroundColor(Color.parseColor("#33000000")); tv.setPadding(8, 8, 8, 8); tv.setText(value); return tv; } // 显示子条目的View @Override public View getChildView(int groupPosition, int childPosition, boolean isLastChild, View convertView, ViewGroup parent) { TextView tv = new TextView(context); // 获取到每一个子的 String itemValue = allItem.get(groupPosition)[childPosition]; tv.setTextSize(18); tv.setPadding(8, 8, 8, 8); tv.setText(itemValue); return tv; } // 子条目是否可以被点击,当设置为true表示可以被点击 @Override public boolean isChildSelectable(int groupPosition, int childPosition) { return true; } // ---------分割线---------- @Override public Object getGroup(int groupPosition) { return null; } @Override public Object getChild(int groupPosition, int childPosition) { return null; } @Override public long getGroupId(int groupPosition) { return 0; } @Override public long getChildId(int groupPosition, int childPosition) { return 0; } @Override public boolean hasStableIds() { return false; }}
0 0
- android_ExpandableListView
- android_ExpandableListView 下拉列表使用
- android_ExpandableListView 下拉列表使用
- 阅读 理解 思考 - Learning to Segment Object Candidates
- Linux下进程调度与优先级的深入分析
- 用React Native编写跨平台APP
- 一个回文字符串的例子
- LeetCode-7小结
- android_ExpandableListView
- C#获取本机上所有网络接口及真实IP地址信息
- 【U3D】Unity引擎链接mySQL数据库
- Hadoop伪分布式安装过程
- iOS:关于“类”这个super且接地气的爸爸
- 二叉搜索树BinarySearchTree的实现
- 初学鸡精回归分析暨spss初演练小课题
- 用OpenInventor实现的NeHe OpenGL教程-第一课
- 用OpenInventor实现的NeHe OpenGL教程-第二课