读书人

ExpandableList-可扩展的list

发布时间: 2012-11-23 00:03:43 作者: rapoo

ExpandableList------可扩展的list
即是:单击某个item后,又可显示一个子list。它的数据通过绑定到ExpandableListAdapter或者ExpandableListAdapter的子类上。示例一:通过SimpelExpandableListAdapter绑定数据
public class MainActivity extends ExpandableListActivity {
List<Map<String, String>> groups = new ArrayList<Map<String, String>>();List<List<Map<String, String>>> childrens = new ArrayList<List<Map<String, String>>>();SimpleExpandableListAdapter adapter ; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); adapter = new SimpleExpandableListAdapter( this, groupData(), android.R.layout.simple_expandable_list_item_1, new String[]{"group"}, new int[]{android.R.id.text1}, childData(), android.R.layout.simple_expandable_list_item_2, new String[]{"child"}, new int[]{android.R.id.text2} ); setListAdapter(adapter); } /** * 该方法为一级条目提供数据 * @return 一级条目数据 */ private List<Map<String, String>> groupData(){ Map<String, String> group1 = new HashMap<String, String>(); group1.put("group", "group1"); Map<String, String> group2 = new HashMap<String, String>(); group2.put("group", "group2"); groups.add(group1); groups.add(group2);return groups; } /** * 该方法为二级条目提供数据 * @return 二级条目数据 */ private List<List<Map<String, String>>> childData(){ List<Map<String, String>> child1 = new ArrayList<Map<String, String>>(); Map<String, String> child1Data = new HashMap<String, String>(); child1Data.put("child", "child1"); child1.add(child1Data); List<Map<String, String>> child2 = new ArrayList<Map<String, String>>(); Map<String, String> child2Data = new HashMap<String, String>(); child2Data.put("child", "child2"); child2.add(child2Data); childrens.add(child1); childrens.add(child2);return childrens; }
@Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.activity_main, menu); return true; }}
示例二:通过SimpleCussorTreeAdapter绑定数据:
public class MainActivity extends ExpandableListActivity {
/** * 获取联系人ID的列位置,一般都是第一个,也就是0 */private int mGroupIdColumnIndex; /** * 要查询联系人的电话号码的字段(也就是子视图的信息) */private String[] mPhoneNumberProject = new String[]{ContactsContract.CommonDataKinds.Phone._ID, ContactsContract.CommonDataKinds.Phone.NUMBER};private ExpandableListAdapter adapter; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // 查询联系人并获取其Cursor对象 CursorLoader loader = new CursorLoader(this, ContactsContract.Contacts.CONTENT_URI, new String[]{ContactsContract.Contacts._ID,ContactsContract.Contacts.DISPLAY_NAME}, null, null, null); Cursor groupCursor =loader.loadInBackground(); // 保存取联系人ID的列位置 mGroupIdColumnIndex = groupCursor .getColumnIndexOrThrow(ContactsContract.Contacts._ID); adapter = new MyExpandableListAdapter(this, groupCursor, android.R.layout.simple_expandable_list_item_1, new String[]{ContactsContract.Contacts.DISPLAY_NAME}, new int[]{android.R.id.text1}, android.R.layout.simple_expandable_list_item_2, new String[]{ContactsContract.CommonDataKinds.Phone.NUMBER}, new int[]{android.R.id.text2} ); setListAdapter(adapter); } private class MyExpandableListAdapter extends SimpleCursorTreeAdapter{
public MyExpandableListAdapter(Context context, Cursor cursor,int groupLayout, String[] groupFrom, int[] groupTo,int childLayout, String[] childFrom, int[] childTo) {super(context, cursor, groupLayout, groupFrom, groupTo, childLayout, childFrom,childTo);}
@Overrideprotected Cursor getChildrenCursor(Cursor groupCursor) {long contactId = groupCursor.getLong(mGroupIdColumnIndex);Uri.Builder builder = ContactsContract.CommonDataKinds.Phone.CONTENT_URI.buildUpon();Uri phoneNumbersUri = builder.build();CursorLoader curLoader = new CursorLoader(MainActivity.this, phoneNumbersUri, mPhoneNumberProject, ContactsContract.CommonDataKinds.Phone.CONTACT_ID + "=?", new String[]{String.valueOf(contactId)}, null);Cursor cursor = curLoader.loadInBackground();return cursor;} }
@Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.activity_main, menu); return true; }}

示例三:通过BaseExpandableListAdapter绑定数据:
public class MyExpandableList extends ExpandableListActivity {ExpandableListAdapter adapter ;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);adapter = new MyExpandableListAdapter();setListAdapter(adapter);}private class MyExpandableListAdapter extends BaseExpandableListAdapter{
private String[] groups = {"电影","电视剧","综艺节目","水果","青菜"};private String[][] children = {{"忠犬八公","泰坦尼克号","开心鬼"},{"谈情说案","大太监","加油妈妈"},{"快乐大本营","职来职往","爱情保卫战"},{"泥猴桃","橘子","柿子"},{"麦菜","娃娃菜","生菜"}};@Overridepublic Object getChild(int groupPosition, int childPosition) {return children[groupPosition][childPosition];}
@Overridepublic long getChildId(int groupPosition, int childPosition) {return childPosition;}
//得到一级目录的数据@Overridepublic View getChildView(int groupPosition, int childPosition,boolean isLastChild, View convertView, ViewGroup parent) {TextView textVeiw = getView();textVeiw.setText(getChild(groupPosition, childPosition).toString());return textVeiw;}
@Overridepublic int getChildrenCount(int groupPosition) {return children[groupPosition].length;}
@Overridepublic Object getGroup(int groupPosition) {return groups[groupPosition];}
@Overridepublic int getGroupCount() {return groups.length;}
@Overridepublic long getGroupId(int groupPosition) {return groupPosition ;}
//得到二级目录的数据@Overridepublic View getGroupView(int groupPosition, boolean isExpanded,View convertView, ViewGroup parent) {TextView textVeiw = getView();textVeiw.setText(getGroup(groupPosition).toString());return textVeiw;}private TextView getView(){AbsListView.LayoutParams layout = new AbsListView.LayoutParams(AbsListView.LayoutParams.MATCH_PARENT, 64);TextView tv = new TextView(MyExpandableList.this);tv.setLayoutParams(layout);tv.setGravity(Gravity.CENTER_VERTICAL|Gravity.LEFT);tv.setPadding(60, 0, 0, 0);return tv;}
@Overridepublic boolean hasStableIds() {return false;}
@Overridepublic boolean isChildSelectable(int groupPosition, int childPosition) {return false;}}}

读书人网 >移动开发

热点推荐