android ExpandAbleListView控件
ExpandAbleListView控件
1.API对ExpandAbleListView的解释:
这里主要的意思就是说:ExpandAbleListView类似于ListView ,但它可以每行展开出自己的list;
2.重要方法
expandGroup (int groupPos) :在分组列表视图中 展开一组,
setSelectedGroup (int groupPosition) :设置选择指定的组。
setSelectedChild (int groupPosition, int childPosition, boolean shouldExpandGroup) :设置选择指定的子项。
getPackedPositionGroup (long packedPosition) :返回所选择的组
getPackedPositionForChild (int groupPosition, int childPosition) :返回所选择的子项
getPackedPositionType (long packedPosition) :返回所选择项的类型(Child,Group)
isGroupExpanded (int groupPosition) :判断此组是否展开
3.下面直接展示一个例子
效果如下:
xml文件中就是一个ExpandAbleListView
MainActivity:
1 public class MainActivity extends Activity { 2 3 private ExpandableListView expandAbleListView; 4 5 private List<String> groupArray; 6 7 private List<List<String>> childArray; 8 9 @Override 10 protected void onCreate(Bundle savedInstanceState) { 11 super.onCreate(savedInstanceState); 12 setContentView(R.layout.activity_main); 13 groupArray = new ArrayList<String>(); 14 childArray = new ArrayList<List<String>>(); 15 groupArray.add("水果"); 16 groupArray.add("动物"); 17 List<String> tempArray = new ArrayList<String>(); 18 tempArray.add("葡萄"); 19 tempArray.add("樱桃"); 20 tempArray.add("苹果"); 21 List<String> tempArray1 = new ArrayList<String>(); 22 tempArray1.add("猴子"); 23 tempArray1.add("熊猫"); 24 tempArray1.add("大象"); 25 childArray.add(tempArray); 26 childArray.add(tempArray1); 27 28 expandAbleListView = (ExpandableListView) findViewById(R.id.expandAbleListView); 29 expandAbleListView.setAdapter(new myExpandAbleListAdapter( 30 MainActivity.this)); 31 expandAbleListView 32 .setOnChildClickListener(new ExpandableListView.OnChildClickListener() { 33 34 @Override 35 public boolean onChildClick(ExpandableListView parent, 36 View v, int groupPosition, int childPosition, 37 long id) { 38 System.out.println("onChildClick"); 39 if (groupPosition == 0) { 40 TextView childView = (TextView) v; 41 childView.setText("第一组group的文字改变"); 42 43 } 44 45 return false; 46 } 47 }); 48 49 // 如果要点击展开一个group另外的group格式关闭的 给group添加展开监听,当其中一个group展开的时候其他的group就会关闭 50 expandAbleListView 51 .setOnGroupExpandListener(new ExpandableListView.OnGroupExpandListener() { 52 53 @Override 54 public void onGroupExpand(int groupPosition) { 55 for (int i = 0; i < groupArray.size(); i++) { 56 if (i != groupPosition) { 57 58 expandAbleListView.collapseGroup(i); 59 60 } 61 62 } 63 } 64 }); 65 66 } 67 68 // 自定义ExpandAbleListView 69 class myExpandAbleListAdapter extends BaseExpandableListAdapter { 70 Context context; 71 72 public myExpandAbleListAdapter(Context context1) { 73 this.context = context1; 74 75 } 76 77 @Override 78 public int getGroupCount() { 79 return groupArray.size(); 80 } 81 82 @Override 83 public int getChildrenCount(int groupPosition) { 84 return childArray.get(groupPosition).size(); 85 } 86 87 @Override 88 public Object getGroup(int groupPosition) { 89 return groupArray.get(groupPosition); 90 } 91 92 @Override 93 public Object getChild(int groupPosition, int childPosition) { 94 return childArray.get(groupPosition).get(childPosition); 95 } 96 97 @Override 98 public long getGroupId(int groupPosition) { 99 100 return groupPosition; 101 } 102 103 private TextView obtainTextView(String str) { 104 AbsListView.LayoutParams params = new AbsListView.LayoutParams( 105 ViewGroup.LayoutParams.FILL_PARENT, 64); 106 TextView textView = new TextView(context); 107 textView.setLayoutParams(params); 108 textView.setGravity(Gravity.CENTER_VERTICAL | Gravity.LEFT); 109 // Set the text starting position 110 textView.setPadding(36, 0, 0, 0); 111 textView.setText(str); 112 return textView; 113 114 } 115 116 @Override 117 public long getChildId(int groupPosition, int childPosition) { 118 return childPosition; 119 } 120 121 @Override 122 public boolean hasStableIds() { 123 return false; 124 } 125 126 // 获取父list 127 @Override 128 public View getGroupView(int groupPosition, boolean isExpanded, 129 View convertView, ViewGroup parent) { 130 131 TextView textView = obtainTextView(groupArray.get(groupPosition)); 132 // 133 // if (isExpanded) { 134 // 135 // Toast.makeText(context, "父类是展开了的", Toast.LENGTH_SHORT).show(); 136 // } else { 137 // 138 // Toast.makeText(context, "子类是展开了的", Toast.LENGTH_SHORT).show(); 139 // } 140 141 return textView; 142 } 143 144 // 获取子list 145 @Override 146 public View getChildView(int groupPosition, int childPosition, 147 boolean isLastChild, View convertView, ViewGroup parent) { 148 TextView textView = obtainTextView(childArray.get(groupPosition) 149 .get(childPosition)); 150 textView.setGravity(Gravity.CENTER_HORIZONTAL); 151 152 return textView; 153 } 154 155 // 如果想让childview能被点击就要返回true 156 @Override 157 public boolean isChildSelectable(int groupPosition, int childPosition) { 158 return true; 159 } 160 161 } 162 163 }
这个简单的例子就到此,下次实现一个综合点的例子如图: