先上图再说,实现效果如下图,选项可多少可变化。

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;}@Overridepublic 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;}@Overridepublic 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);}@Overridepublic boolean onGroupClick(ExpandableListView parent, View v,int groupPosition, long id) {return false;}@Overridepublic boolean onChildClick(ExpandableListView parent, View v,int groupPosition, int childPosition, long id) {return false;}}

更多相关文章

  1. 浅谈Java中Collections.sort对List排序的两种方法
  2. python list.sort()根据多个关键字排序的方法实现
  3. android EditText设置不可写
  4. Android(安卓)拨号器的简单实现
  5. android实现字体闪烁动画的方法
  6. Android中不同应用间实现SharedPreferences数据共享
  7. android ndk编译x264开源(用于android的ffmpeg中进行软编码)
  8. [Android(安卓)NDK]Android(安卓)JNI开发例子 ---3 在JNI中实现o
  9. Android(安卓)P SystemUI之StatusBar UI布局status_bar.xml解析

随机推荐

  1. android java.util.ConcurrentModificati
  2. Android(安卓)CTS Debug
  3. Android(安卓)zip文件压缩解压缩
  4. android保存用户名密码
  5. android:allowBackup="true"
  6. Android(安卓)TabSwitcher自定义控件
  7. android显示和隐藏键盘
  8. Understanding the takePicture in Andro
  9. Android(安卓)禁止 ListView 上下滑动
  10. 智能手机软件平台 Android(安卓)VS iPhon