转自:http://fonter.iteye.com/blog/684238
先上图再说,实现效果如下图,选项可多少可变化。
BaseExpandableListAdapter实现
- import java.util.List;
- import android.content.Context;
- import android.graphics.drawable.Drawable;
- import android.view.LayoutInflater;
- import android.view.View;
- import android.view.ViewGroup;
- import android.widget.BaseExpandableListAdapter;
- import android.widget.CheckBox;
- import android.widget.ImageView;
- import android.widget.TextView;
- import com.iwidsets.clear.manager.R;
- import com.iwidsets.clear.manager.adapter.BrowserInfo;
- public class ClearExpandableListAdapter extends BaseExpandableListAdapter {
- class ExpandableListHolder {
- ImageView appIcon;
- TextView appInfo;
- CheckBox appCheckBox;
- }
- private Context context;
- private LayoutInflater mChildInflater;
- private LayoutInflater mGroupInflater;
- private List<GroupInfo> group;
- public ClearExpandableListAdapter(Context c, List<GroupInfo> group) {
- this.context = c;
- mChildInflater = (LayoutInflater) context
- .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
- mGroupInflater = (LayoutInflater) context
- .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
- this.group = group;
- }
- public Object getChild(int childPosition, int itemPosition) {
- return group.get(childPosition).getChild(itemPosition);
- }
- public long getChildId(int childPosition, int itemPosition) {
- return itemPosition;
- }
- @Override
- public int getChildrenCount(int index) {
- return group.get(index).getChildSize();
- }
- public Object getGroup(int index) {
- return group.get(index);
- }
- public int getGroupCount() {
- return group.size();
- }
- public long getGroupId(int index) {
- return index;
- }
- public View getGroupView(int position, boolean flag, View view,
- ViewGroup parent) {
- ExpandableListHolder holder = null;
- if (view == null) {
- view = mGroupInflater.inflate(
- R.layout.browser_expandable_list_item, null);
- holder = new ExpandableListHolder();
- holder.appIcon = (ImageView) view.findViewById(R.id.app_icon);
- view.setTag(holder);
- holder.appInfo = (TextView) view.findViewById(R.id.app_info);
- holder.appCheckBox = (CheckBox) view
- .findViewById(R.id.app_checkbox);
- } else {
- holder = (ExpandableListHolder) view.getTag();
- }
- GroupInfo info = this.group.get(position);
- if (info != null) {
- holder.appInfo.setText(info.getBrowserInfo().getAppInfoId());
- Drawable draw = this.context.getResources().getDrawable(
- info.getBrowserInfo().getImageId());
- holder.appIcon.setImageDrawable(draw);
- holder.appCheckBox.setChecked(info.getBrowserInfo().isChecked());
- }
- return view;
- }
- public boolean hasStableIds() {
- return false;
- }
- public boolean isChildSelectable(int arg0, int arg1) {
- return false;
- }
- @Override
- public View getChildView(int groupPosition, int childPosition,
- boolean isLastChild, View convertView, ViewGroup parent) {
- ExpandableListHolder holder = null;
- if (convertView == null) {
- convertView = mChildInflater.inflate(
- R.layout.browser_expandable_list_item, null);
- holder = new ExpandableListHolder();
- holder.appIcon = (ImageView) convertView
- .findViewById(R.id.app_icon);
- convertView.setTag(holder);
- holder.appInfo = (TextView) convertView.findViewById(R.id.app_info);
- holder.appCheckBox = (CheckBox) convertView
- .findViewById(R.id.app_checkbox);
- } else {
- holder = (ExpandableListHolder) convertView.getTag();
- }
- BrowserInfo info = this.group.get(groupPosition)
- .getChild(childPosition);
- if (info != null) {
- holder.appInfo.setText(info.getAppInfoId());
- Drawable draw = this.context.getResources().getDrawable(
- info.getImageId());
- holder.appIcon.setImageDrawable(draw);
- holder.appCheckBox.setChecked(info.isChecked());
- }
- return convertView;
- }
- }
要想让child获得焦点,只在改
- public boolean isChildSelectable(int arg0, int arg1) {
- return true;
- }
browser_expandable_list_item.xml 用于显示每一个ITEM的XML
- <?xml version="1.0" encoding="utf-8"?>
- <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="fill_parent" android:layout_height="wrap_content"
- android:orientation="horizontal" android:minHeight="40px"
- android:layout_gravity="center_vertical">
- <CheckBox android:id="@+id/app_checkbox" android:focusable="false"
- android:layout_width="wrap_content" android:layout_height="wrap_content"
- android:layout_marginLeft="35px" android:checked="true"/>
- <ImageView android:id="@+id/app_icon" android:layout_width="wrap_content"
- android:layout_height="wrap_content" android:layout_gravity="center_vertical" />
- <TextView android:id="@+id/app_info" android:layout_width="wrap_content"
- android:layout_height="wrap_content" android:textColor="?android:attr/textColorPrimary"
- android:paddingLeft="3px" android:layout_gravity="center_vertical" />
- </LinearLayout>
browserlayout.xml 用于显示整个界面
- <?xml version="1.0" encoding="utf-8"?>
- <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="fill_parent" android:layout_height="fill_parent"
- android:orientation="vertical">
- <ExpandableListView android:id="@+id/appList"
- android:layout_width="fill_parent" android:layout_height="0dip"
- android:layout_weight="1" />
- <LinearLayout android:layout_height="wrap_content"
- android:layout_width="fill_parent" android:paddingLeft="4dip"
- android:paddingRight="4dip" android:paddingBottom="1dip"
- android:paddingTop="5dip" android:background="@android:drawable/bottom_bar"
- android:id="@+id/app_footer">
- <Button android:layout_weight="1" android:id="@+id/btn_export"
- android:layout_width="0dip" android:layout_height="fill_parent"
- android:text="@string/clear"></Button>
- <Button android:layout_weight="1" android:id="@+id/btn_sel_all"
- android:layout_width="0dip" android:layout_height="fill_parent"
- android:text="select_all"></Button>
- <Button android:layout_weight="1" android:id="@+id/btn_desel_all"
- android:layout_width="0dip" android:layout_height="fill_parent"
- android:text="deselect_all"></Button>
- </LinearLayout>
- </LinearLayout>
BrowserInfo用于提供一个项的信息
- public class BrowserInfo {
- private int appInfoId;
- private int imageId;
- private boolean checked;
- public BrowserInfo(int appInfoId, int imageId, boolean checked) {
- this.appInfoId = appInfoId;
- this.imageId = imageId;
- this.checked = checked;
- }
- public boolean isChecked() {
- return checked;
- }
- public void setChecked(boolean checked) {
- this.checked = checked;
- }
- public int getAppInfoId() {
- return appInfoId;
- }
- public void setAppInfoId(int appInfoId) {
- this.appInfoId = appInfoId;
- }
- public int getImageId() {
- return imageId;
- }
- public void setImageId(int imageId) {
- this.imageId = imageId;
- }
- }
GroupInfo 用于显示一个组的信息
- import java.util.List;
- public class GroupInfo {
- private BrowserInfo group;
- private List<BrowserInfo> child;
- public GroupInfo(BrowserInfo group, List<BrowserInfo> child) {
- this.group = group;
- this.child = child;
- }
- public void add(BrowserInfo info){
- child.add(info);
- }
- public void remove(BrowserInfo info){
- child.remove(info);
- }
- public void remove(int index){
- child.remove(index);
- }
- public int getChildSize(){
- return child.size();
- }
- public BrowserInfo getChild(int index){
- return child.get(index);
- }
- public BrowserInfo getBrowserInfo() {
- return group;
- }
- public void setBrowserInfo(BrowserInfo group) {
- this.group = group;
- }
- public List<BrowserInfo> getChild() {
- return child;
- }
- public void setChild(List<BrowserInfo> child) {
- this.child = child;
- }
- }
ClearBrowserActivity 最后就是把要显示的内容显示出来的。
- public class ClearBrowserActivity extends Activity implements ExpandableListView.OnGroupClickListener,ExpandableListView.OnChildClickListener{
- private List<GroupInfo> group;
- private ClearExpandableListAdapter listAdapter = null;
- private ExpandableListView appList;
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.browserlayout);
- appList = (ExpandableListView) findViewById(R.id.appList);
- init();
- BrowserInfo browsingHistoryParents = newBrowserInfo(
- R.string.browsinghistory, R.drawable.browser_image,true);
- List<BrowserInfo> browsingHistoryChild = new ArrayList<BrowserInfo>();
- BrowserInfo browser = newBrowserInfo(R.string.browser,
- R.drawable.browser_image, true);
- browsingHistoryChild.add(browser);
- BrowserInfo operaClear = newBrowserInfo(R.string.opera_clear,
- R.drawable.browser_image,true);
- browsingHistoryChild.add(operaClear);
- BrowserInfo firefoxClear = newBrowserInfo(R.string.firefox_clear,
- R.drawable.browser_image,true);
- browsingHistoryChild.add(firefoxClear);
- BrowserInfo ucwebClear = newBrowserInfo(R.string.ucweb_clear,
- R.drawable.browser_image,false);
- browsingHistoryChild.add(ucwebClear);
- GroupInfo browserGroup = new GroupInfo(browsingHistoryParents,
- browsingHistoryChild);
- addGroup(browserGroup);
- listAdapter = new ClearExpandableListAdapter(this, group);
- appList.setOnChildClickListener(this);
- appList.setOnGroupClickListener(this);
- appList.setAdapter(listAdapter);
- }
- private void init() {
- group = new ArrayList<GroupInfo>();
- }
- private void addGroup(GroupInfo info) {
- group.add(info);
- }
- private static BrowserInfo newBrowserInfo(int infoId, int imageId,boolean checked) {
- return new BrowserInfo(infoId, imageId,checked);
- }
- @Override
- public boolean onGroupClick(ExpandableListView parent, View v,
- int groupPosition, long id) {
- return false;
- }
- @Override
- public boolean onChildClick(ExpandableListView parent, View v,
- int groupPosition, int childPosition, long id) {
- return false;
- }
- }