Android BaseExpandableListAdapter


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

BaseExpandableListAdapter实现

Java代码 
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获得焦点,只在改
 
Java代码 
public boolean isChildSelectable(int arg0, int arg1) { 
    return true; 

 
 
browser_expandable_list_item.xml 用于显示每一个ITEM的XML
 
 
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代码 
<?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用于提供一个项的信息
 
Java代码 
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 用于显示一个组的信息
 
Java代码 
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 最后就是把要显示的内容显示出来的。
 
 
Java代码 
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; 
    } 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值