前阵子写到一个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>