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>

 

 

 

 

你可能感兴趣的:(thread,android,xml)