ExpandableListView 是android可实现的下拉list的控件,我们看下具体实现的方法:
1)xml布局:
布局里只要写一个ExpandableListView就可以。
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="
http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<include layout="@layout/layout_head"/>
<ExpandableListView
android:id="@+id/assess_history_listview"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#ffffff"
android:cacheColorHint="#00000000"
android:listSelector="#00000000">
</ExpandableListView>
</LinearLayout>
2)main activity
/**
* Created by ting on 16-5-16.
* 点击评估记录界面
* */
public class AssessHistoryActivity extends JINABaseActivity {
private ExpandableListView mAssessHisListview;
private AssessExpandableListViewAdapter expandableListViewAdapter;
//设置组视图的显示文字,此处可以写入实际使用的数据
public String[] assessGroupText = new String[] { "语言", "模式" };
//子视图显示文字,此处为了设计方便
public String[] assessChildText = new String[]
{ "Java", "C", "C#", "C++"};
@Override
public void initWidget() {
setContentView(R.layout.activity_assess_history);
requestQueue = VolleyInstance.getInstance(this).getRequestQueue();
initView();
}
/*
* 初始化数据
* */
private void initView() {
mAssessHisListview = (ExpandableListView) findViewById(R.id.assess_history_listview);
expandableListViewAdapter = new AssessExpandableListViewAdapter(this,assessGroupText,assessChildText);
mAssessHisListview.setAdapter(expandableListViewAdapter);
}
@Override
public void widgetClick(View v) {
}
}
3)定义适配器
/**
* Created by ting on 16-5-16.
* 点击评估记录界面适配器
*/
public class AssessExpandableListViewAdapter extends BaseExpandableListAdapter{
private static final String TAG = "AssessListViewAdapter";
private Context mContext;
private String[] assessGroupText;
private String[] assessChildText;
public AssessExpandableListViewAdapter(Context context ,String[] groupText,String[] childText){
mContext = context;
assessGroupText = groupText;
assessChildText = childText;
}
@Override
public int getGroupCount() {
return assessGroupText == null ? 0 : assessGroupText.length;
}
@Override
public int getChildrenCount(int groupPosition) {
return assessChildText.length;
}
@Override
public Object getGroup(int groupPosition) {
return assessGroupText[groupPosition];
}
@Override
public Object getChild(int groupPosition, int childPosition) {
return assessChildText[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) {
Log.d(TAG,"GetGroupView :" + groupPosition + "assessGroupText: " + assessGroupText);
LinearLayout layout = new LinearLayout(mContext);
TextView textview = new TextView(mContext);
textview.setPadding(36,10,0,0);
textview.setTextSize(20);
textview.setGravity(Gravity.CENTER_VERTICAL);
textview.setText(getGroup(groupPosition).toString());
layout.addView(textview);
return layout;
}
@Override
public View getChildView(int groupPosition, int childPosition, boolean isLastChild, View convertView, ViewGroup parent) {
Log.d(TAG,"getChildView :" + childPosition + "assessChildText: " + assessChildText);
LinearLayout layout = new LinearLayout(mContext);
TextView textview = new TextView(mContext);
textview.setPadding(36,10,0,0);
textview.setTextSize(20);
textview.setGravity(Gravity.CENTER_VERTICAL);
textview.setText(getChild(groupPosition,childPosition).toString());
layout.addView(textview);
return layout;
}
@Override
public boolean isChildSelectable(int groupPosition, int childPosition) {
return false;
}
}
总结:
重要方法:
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);//判断此组是否展开
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);//判断此组是否展开
之前查找的时候发现都是附着很多的条件,没有简洁一点介绍expandlistview的,所以想记录下,这里写的不够详细,还请见谅。