先看效果~
也就是BaseExpandableListAdapter、AbsListView类的使用,就不多说了..大牛留情...
就两个类。
ExpandLabel:
package com.yfz; import java.util.ArrayList; import java.util.List; import android.app.Activity; import android.os.Bundle; import android.view.ViewGroup.LayoutParams; import android.widget.ExpandableListView; import android.widget.ViewFlipper; public class ExpandLabel extends Activity { /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); // 数据源 //标题 List<String> groupArray = new ArrayList<String>(); //子标题 List<List<String>> childArray = new ArrayList<List<String>>(); groupArray.add("第一章"); groupArray.add("第二章"); List<String> tempArray01 = new ArrayList<String>(); tempArray01.add("第1.1节"); tempArray01.add("第1.2节"); tempArray01.add("第1.3节"); List<String> tempArray02 = new ArrayList<String>(); tempArray02.add("第2.1节"); tempArray02.add("第2.2节"); tempArray02.add("第2.3节"); childArray.add(tempArray01); childArray.add(tempArray02); ExpandableListView expandableListView = new ExpandableListView(this); ExpandableAdapter adapter = new ExpandableAdapter(this,groupArray,childArray); expandableListView.setAdapter(adapter); addContentView(expandableListView, new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT)); } }
groupArray:表示一级菜单
childArray: 表示二级菜单
二级菜单相当于一个二维List,该List中存储的每个元素都是一个List。第一个元素对应一级菜单中第一个菜单的子项List,第二个元素对应一级菜单中第二个菜单的子项List,依次类推。
ExpandableAdapter:
package com.yfz; import java.util.ArrayList; import java.util.List; import android.app.Activity; import android.view.Gravity; import android.view.View; import android.view.ViewGroup; import android.widget.AbsListView; import android.widget.BaseExpandableListAdapter; import android.widget.TextView; public class ExpandableAdapter extends BaseExpandableListAdapter { private List<String> groupArray; private List<List<String>> childArray; private Activity activity; public ExpandableAdapter(Activity a,List<String> groupArray,List<List<String>> childArray) { activity = a; this.groupArray = groupArray; this.childArray = childArray; } @Override public Object getChild(int groupPosition, int childPosition) { // TODO Auto-generated method stub return childArray.get(groupPosition).get(childPosition); } @Override public long getChildId(int groupPosition, int childPosition) { // TODO Auto-generated method stub return childPosition; } @Override public View getChildView(int groupPosition, int childPosition, boolean isLastChild, View convertView, ViewGroup parent) { // TODO Auto-generated method stub String string = childArray.get(groupPosition).get(childPosition); return getGenericView(string); } @Override public int getChildrenCount(int groupPosition) { // TODO Auto-generated method stub return childArray.get(groupPosition).size(); } @Override public Object getGroup(int groupPosition) { // TODO Auto-generated method stub return groupArray.get(groupPosition); } @Override public int getGroupCount() { // TODO Auto-generated method stub return groupArray.size(); } @Override public long getGroupId(int groupPosition) { // TODO Auto-generated method stub return groupPosition; } @Override public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) { // TODO Auto-generated method stub String string = groupArray.get(groupPosition); return getGenericView(string); } @Override public boolean hasStableIds() { // TODO Auto-generated method stub return false; } @Override public boolean isChildSelectable(int groupPosition, int childPosition) { // TODO Auto-generated method stub return false; } /****************************************以下为自定义方法*********************************************/ /** * Children 's View * @param string * @return */ public TextView getGenericView(String string) { AbsListView.LayoutParams layoutParams = new AbsListView.LayoutParams(ViewGroup.LayoutParams.FILL_PARENT, 64); TextView text = new TextView(activity); text.setLayoutParams(layoutParams); // Center the text vertically text.setGravity(Gravity.CENTER_VERTICAL | Gravity.LEFT); // Set the text starting position text.setPadding(36, 0, 0, 0); text.setText(string); return text; } }
ExpandableListView的OnChildClickListener无效? ExpandableListView子元素无法点击?
不知道大家有没有发现,上面这样做之后, Child项时无法被点击的。 因此也会造成OnChildClickListener注册后无效。 即不管你怎么点击Child项,onChildClick始终不会被调用, 原因是什么呢?
很简单,是自定义adapter中的 isChildSelectable 方法造成。 这个方法标识子元素能否被点击。 返回false就无法被点击,要返回true才行。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。