`

Expandlistview的使用

阅读更多

前阵子写到一个Expandlistview的东西。用来做下载的,让我这菜鸟死了不少脑细胞。想想贴出来吧。方便自己,也方便大家。

 

 

 

 首先是Activity里oncreate方法咯:

如下:

    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);

        LayoutInflater inflater = getLayoutInflater();

        setContentView(R.layout.download);

        list = (ExpandableListView) findViewById(R.id.expand);
        //设置背景透明
        list.setCacheColorHint(Color.TRANSPARENT);

        list.setOnChildClickListener(new OnChildClickListener()
        {

            @Override
            public boolean onChildClick(ExpandableListView parent, View v,
                int groupPosition, int childPosition, long id)
            {
                //写点击事件...

                return false;
            }
        });
        mAdapter = new ExpandAdapter(inflater);

        list.setAdapter(mAdapter);
    }

 下面是适配器的代码:

    public class ExpandAdapter extends BaseExpandableListAdapter
    {
        private LayoutInflater expandview;

        /**
         * 
         * 带参构造
         * 
         * @param inflater 可扩展视图
         */
        @SuppressWarnings("unchecked")
        public ExpandAdapter(LayoutInflater inflater)
        {


            //给groupVector添加String值,用作菜单显示
        allTask.clear();
            allTask.add("finish");
            allTask.add("running");
            //将inflater 参数赋给本地的inflater
            expandview = inflater;
            for (int i = 0; i < finishsize; i++)
            {
                DownLoadTaskInfo info = (DownLoadTaskInfo) finishVector
                    .elementAt(i);
                finishTask.add(info);
            }

            for (int i = 0; i < downsize; i++)
            {
                DownLoadTaskInfo info = (DownLoadTaskInfo) downVector
                    .elementAt(i);
                runningTask.add(info);
            }

//这里边启动一个根据线程来给vector赋值的。
            new Thread(new Runnable()
            {
                @Override
                public void run()
                {
                    while (true)
                    {
                        try
                        {
                            Thread.sleep(500);
                        }
                        catch (InterruptedException e)
                        {
                            e.printStackTrace();
                        }

                        for (int i = 0; i < runningTask.size(); i++)
                        {
//赋值的代码就不贴了..

}
                        realTask.clear();
                        realTask.add(finishTask);
                        realTask.add(runningTask);
                    }
                }

            }).start();
        }

        //        }

        /**
         * 
         * 获得子元素对象 [功能详细描述]
         * 
         * @param groupPosition 父位置
         * @param childPosition 子位置
         * @return 子元素
         * @see android.widget.ExpandableListAdapter#getChildId(int, int)
         */
        @Override
        public Object getChild(int groupPosition, int childPosition)
        {

            return realTask.elementAt(groupPosition).elementAt(childPosition);

        }

        /**
         * 
         * 获得子ID [功能详细描述]
         * 
         * @param groupPosition 父位置
         * @param childPosition 子位置
         * @return 子位置参数
         * @see android.widget.ExpandableListAdapter#getChildId(int, int)
         */
        @Override
        public long getChildId(int groupPosition, int childPosition)
        {
            return childPosition;
        }

        /**
         * 
         * 获取子view [功能详细描述]
         * 
         * @param groupPosition 父view位置
         * @param childPosition 子view 位置
         * @param isLastChild 最后一个子view
         * @param convertView convertview
         * @param parent 父view
         * @return 子view
         */
        @Override
        public View getChildView(int groupPosition, int childPosition,
            boolean isLastChild, View convertView, ViewGroup parent)
        {
            DownLoadTaskInfo childinfo = (DownLoadTaskInfo) (realTask
                .get(groupPosition).get(childPosition));
            convertView = getChildsView(childinfo);
            return convertView;

        }

        /**
         * 
         * 获得子view数目
         * 
         * @param groupPosition 父view位置
         * @return 子view的数目
         * @see android.widget.ExpandableListAdapter#getChildrenCount(int)
         */
        @Override
        public int getChildrenCount(int groupPosition)
        {

            return realTask.elementAt(groupPosition).size();
        }

        /**
         * 
         * 获得父元素 [功能详细描述]
         * 
         * @param groupPosition 父元素位置
         * @return 父节点名称
         * @see android.widget.ExpandableListAdapter#getGroup(int)
         */
        @Override
        public Object getGroup(int groupPosition)
        {
            if ("finish".equals(allTask.elementAt(groupPosition)))
            {
                return getResources().getString(R.string.DownLoadFinish)
                    + "  (" + finishTask.size() + ")";
            }
            else
            {
                return getResources().getString(R.string.DownLoading) + "  ("
                    + runningTask.size() + ")";
            }
        }

        /**
         * 
         * 获得父元素个数 [功能详细描述]
         * 
         * @return 父元素个数
         * @see android.widget.ExpandableListAdapter#getGroupCount()
         */
        @Override
        public int getGroupCount()
        {
            return allTask.size();
        }

        /**
         * 
         * 父元素ID [功能详细描述]
         * 
         * @param groupPosition 父元素位置
         * @return 父元素ID
         * @see android.widget.ExpandableListAdapter#getGroupId(int)
         */
        @Override
        public long getGroupId(int groupPosition)
        {
            return groupPosition;
        }

        /**
         * 获得Group的视图 * [功能详细描述]
         * 
         * @param groupPosition 父元素位置
         * @param isExpanded 是否可扩展
         * @param convertView 覆盖视图
         * @param parent 父节点
         * @return 父元素视图
         * @see android.widget.ExpandableListAdapter#getGroupView(int, boolean,
         *      android.view.View, android.view.ViewGroup)
         */
        @Override
        public TextView getGroupView(int groupPosition, boolean isExpanded,
            View convertView, ViewGroup parent)
        {
            TextView txtView = getGenericView();
            txtView.setText(getGroup(groupPosition).toString());
            return txtView;
        }

        /**
         * 
         * 是否Stable [功能详细描述]
         * 
         * @return boolean值
         * @see android.widget.ExpandableListAdapter#hasStableIds()
         */
        @Override
        public boolean hasStableIds()
        {
            return true;
        }

        /**
         * 
         * 是否child可选 [功能详细描述]
         * 
         * @param groupPosition 父元素位置
         * @param childPosition 子元素位置
         * @return boolean
         * @see android.widget.ExpandableListAdapter#isChildSelectable(int, int)
         */
        @Override
        public boolean isChildSelectable(int groupPosition, int childPosition)
        {
            return true;
        }

        /**
         * 
         * 获得父元素视图格式 [功能详细描述]
         * 
         * @return TextView
         */
        public TextView getGenericView()
        {

            AbsListView.LayoutParams lp = new AbsListView.LayoutParams(
                ViewGroup.LayoutParams.FILL_PARENT, 40);
            //
            TextView textView = new TextView(DownloadActivity.this);
            textView.setLayoutParams(lp);
            //            // Center the text vertically
            textView.setGravity(Gravity.CENTER_VERTICAL | Gravity.LEFT);
            //            // Set the text starting position
            textView.setPadding(36, 10, 0, 0);
            return textView;
        }

        /**
         * 
         * 获得子元素视图 [功能详细描述]
         * 
         * @param info 下载信息
         * @return View
         */
        public View getChildsView(DownLoadTaskInfo info)
        {
            String name = info.showName;
            int state = info.state;
            String percent = info.percent + "%";
            View view = expandview.inflate(R.layout.expand_childitem, null);
            ImageView img = (ImageView) view.findViewById(R.id.downitem_image);
            TextView txtview = (TextView) view
                .findViewById(R.id.downitem_showname);
            TextView pctview = (TextView) view
                .findViewById(R.id.downitem_percent);
          //这些都是根据state来完成对应的item样式
  if (state == 6)
            {
                img.setImageResource(R.drawable.download_finish);
                txtview.setText(name);
            }
            else if (state == 1)
            {
                img.setImageResource(R.drawable.download_start);
                txtview.setText(name);
                pctview.setText(percent);
            }
            else if (state == 2)
            {
                img.setImageResource(R.drawable.download_pause);
                txtview.setText(name);
                pctview.setText(percent);
            }
            else if (state == 3)
            {
                img.setImageResource(R.drawable.download_lost);
                txtview.setText(name);
            }
            return view;
        }

    }

 下面的download.xml文件

<?xml version="1.0" encoding="utf-8"?>

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
	android:orientation="vertical" android:layout_width="fill_parent"
	android:layout_height="fill_parent">
	<ExpandableListView android:id="@+id/expand"
		android:layout_below="@+id/layout" android:layout_width="fill_parent"
		android:layout_height="fill_parent" />
</RelativeLayout>

 

 

这个是子item的样式文件:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
	android:layout_width="wrap_content" android:layout_height="100px"
	android:layout_gravity="top|center">
	<ImageView android:id="@+id/downitem_image"
		android:layout_alignParentTop="true" android:layout_marginLeft="10px"
		android:layout_width="wrap_content" android:layout_height="wrap_content" />
	<TextView android:id="@+id/downitem_showname"
		android:layout_alignParentTop="true" android:layout_marginLeft="100px"
		android:paddingTop="5px" android:layout_width="wrap_content"
		android:layout_height="wrap_content" />
	<TextView android:id="@+id/downitem_percent"
		android:layout_alignParentTop="true" android:layout_marginLeft="260px"
		android:paddingTop="5px" android:layout_width="wrap_content"
		android:layout_height="wrap_content" />
</RelativeLayout>

 

 

 

 

分享到:
评论
2 楼 mm4409092 2012-05-14  
ExpandableListView实例(一)_数据库增删改查处理和listitem点击长按处理
http://blog.csdn.net/lk_blog/article/details/7562987

ExpandableListView实例(二)_两种方式实现QQ中组后面显示子条目数量效果
http://blog.csdn.net/lk_blog/article/details/7563355

ExpandableListView实例(三)_实现QQ中"未分组"效果和"未分组"不可编辑删除功能
http://blog.csdn.net/lk_blog/article/details/7563371
1 楼 琼露露 2011-02-18  
为什么例子和页面上的不是一个程序...

相关推荐

    ExpandListView

    ExpandListView在我们开发中使用非常常见,但原生的ExpandListView往往会达不到我们使用的效果,我们会以两个例子为例来理解ExpandListView,现在我们看下如何做呢?blog:...

    expandlistview

    "expandlistview"是一个在Android开发中常见的组件,主要用于实现可展开和折叠的列表视图。这个组件在很多场合下非常实用,比如展示层级关系的数据或者进行详细信息的隐藏与显示,以提高用户体验。从标题来看,我们...

    2级菜单Expandlistview

    标题“2级菜单Expandlistview”恰好描述了这个控件在实现多级菜单时的应用。在这个教程中,我们将深入探讨ExpandableListView的工作原理以及如何使用它来创建一个具有二级菜单的界面。 ExpandableListView是...

    ExpandListView实例

    在Android开发中,ExpandListView是一种常用的控件,它允许用户展开和折叠子列表项,为用户提供了一种层次化的数据展示方式。本实例将详细介绍如何在实际应用中实现ExpandListView的功能。 首先,理解...

    安卓listview相关相关-ExpandListView滑动到顶端时固定.zip

    4. **使用HeaderView**:在ListView或ExpandListView中添加一个HeaderView,然后在滚动监听中处理头部视图的位置,使其在滑动到顶部时保持固定。这种方法需要精确计算滚动位置和视图高度。 在实际项目中,我们还...

    用RecyclerView写的ExpandListView

    总结来说,使用`RecyclerView`实现`ExpandListView`功能,主要涉及到自定义`Adapter`、处理点击事件、管理布局以及优化性能等方面。这种实现方式具有更高的灵活性,可以根据项目需求定制更多复杂的功能,同时也能...

    ExpandListView自定义下拉刷新和上拉加载更多

    实现这个功能,我们可以使用SwipeRefreshLayout和LoadMoreView这两个组件。SwipeRefreshLayout作为父布局,可以包裹ExpandListView,提供下拉刷新的功能。LoadMoreView是自定义的视图,用于在列表底部显示加载更多的...

    expandlistview 加如动画效果

    "expandlistview 加入动画效果"就是这样一个需求,它指的是为ExpandableListView添加特定的动画,例如当一个分组被展开时,其他分组会向下平滑地移动,这种效果就像水波纹扩散一样,给予用户更为直观和舒适的视觉...

    带展开动画的expandlistview

    "带展开动画的expandlistview"是GitHub上一个开源项目,它在ExpandableListView的基础上添加了动态展开和折叠的动画效果,提升了用户体验。 这个项目的核心在于`AnimatedExpandableListView`,它继承自Android原生...

    expandlistview的下拉刷新

    而“expandlistview的下拉刷新”是指为这个控件添加下拉刷新功能,使得用户在顶部拉动时可以更新数据。下拉刷新在移动应用中非常常见,为用户提供了一种便捷的方式来获取最新的内容。 实现`ExpandableListView`的...

    expandlistview多层展开Android-TreeView-原版

    在Android开发中,有时我们需要创建一个能够展示层级结构的数据...在实际开发中,根据项目的具体需求,我们可以灵活选择使用`ExpandableListView`的基础功能,或是`TreeView`的高级特性,以实现更加复杂的树状布局。

    安卓listview相关相关-有趣的ExpandListView.zip

    在"有趣的ExpandListView.zip"这个压缩包中,可能包含了一个关于如何使用和定制ExpandListView的示例项目。项目中可能有以下几个关键部分: 1. **184324nzy3oxxx5v2t1obv.gif**:这可能是一个动态图,展示了...

    ListView实现ExpandListViewDemo

    而ExpandListView是ListView的一个扩展,它增加了子项可以展开和折叠的功能,非常适合用来构建层级结构的数据展示。本篇文章将详细探讨如何在Android中实现一个ExpandListViewDemo。 首先,我们需要理解ListView的...

    仿通讯录的ExpandListView的GroupName悬停

    在Android开发中,ExpandListView是一种常用的控件,它允许用户展开和折叠子列表项,非常适合用来展示层次结构的数据。在“仿通讯录的ExpandListView的GroupName悬停”这个主题中,我们关注的是如何实现一种类似...

    ExpandListView自动更新(以前发到eoe,现在整理下)

    在Android开发中,`ExpandListView`是一个非常常用的控件,它允许我们展示可折叠的列表项,即子项可以通过点击父项来展开或收起。本文将深入探讨如何实现`ExpandListView`的自动更新功能,这在数据动态变化时特别...

    ExpandListView:listView显示多种风格的item的实现,并且有展开按钮

    本教程将详细介绍如何使用ExpandListView来实现这种功能。 首先,我们来看标题"ExpandListView: listView显示多种风格的item的实现"。ExpandListView是Android SDK提供的一种特殊类型的ListView,它允许子项可以被...

Global site tag (gtag.js) - Google Analytics