扩展ListView的实现重点(ExpandableListView的强调点)
来源:互联网 发布:梦幻西游总是网络错误 编辑:程序博客网 时间:2024/05/24 05:01
从网上找了资料来学习扩展ListView,现将其中一个典型的例子分享,并加深自己的理解;
原文链接http://blog.csdn.net/zhouyuanjing/article/details/8254421
扩展ListView和普通的ListView一样,包括布局文件,数据适配器和MainActivity三部分,我们分别讲解
1.布局文件,传统的ListView只需要一个item布局文件,ExpandableListView需要两个item布局文件;
2.适配器基类变为BaseExpandableListAdapter,对应传入适配器的List集合变为List<List<T>>,外层是组,内层是真正的listview;
3.MainActivity需要继承的单击事件变为OnChildClickListener;
具体实现过程:
1.组布局文件
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="?android:attr/listPreferredItemHeight" android:orientation="horizontal" > <TextView android:id="@+id/group_name" android:layout_width="wrap_content" android:layout_height="?android:attr/listPreferredItemHeight" android:textAppearance="?android:attr/textAppearanceMedium" android:layout_marginLeft="35dip" android:gravity="center_vertical" android:singleLine="true" /> <TextView android:id="@+id/group_count" android:layout_width="wrap_content" android:layout_height="?android:attr/listPreferredItemHeight" android:textAppearance="?android:attr/textAppearanceMedium" android:layout_marginLeft="5dip" android:gravity="center_vertical" android:singleLine="true"/></LinearLayout>
2.子列表布局文件
<?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:minHeight="@dimen/min_Height" android:descendantFocusability="blocksDescendants" android:orientation="horizontal" > <ImageButton android:id="@+id/img" android:layout_width="@dimen/image_width" android:layout_height="@dimen/image_width" android:layout_marginLeft="2dip" android:layout_marginRight="10dip" android:layout_gravity="center_vertical" /> <LinearLayout android:layout_width="wrap_content" android:layout_height="match_parent" android:descendantFocusability="blocksDescendants" android:orientation="vertical" > <TextView android:id="@+id/item_name" android:layout_width="wrap_content" android:layout_height="0.0dip" android:gravity="center_vertical" android:layout_weight="1" /> <TextView android:id="@+id/item_detail" android:layout_width="wrap_content" android:layout_height="0.0dip" android:gravity="center_vertical" android:singleLine="true" android:ellipsize="end" android:layout_weight="1" /> </LinearLayout></LinearLayout>
3.适配器
package com.xyz.expande;import java.util.List;import android.app.AlertDialog;import android.content.Context;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.widget.BaseExpandableListAdapter;import android.widget.ImageView;import android.widget.TextView;public class ExpandAdapter extends BaseExpandableListAdapter { private Context mContext; private LayoutInflater mInflater = null; private String[] mGroupStrings = null; private List<List<Item>> mData = null; public ExpandAdapter(Context ctx, List<List<Item>> list) { mContext = ctx; mInflater = (LayoutInflater) mContext .getSystemService(Context.LAYOUT_INFLATER_SERVICE); mGroupStrings = mContext.getResources().getStringArray(R.array.groups); mData = list; } public void setData(List<List<Item>> list) { mData = list; } @Override public int getGroupCount() { // TODO Auto-generated method stub return mData.size(); } @Override public int getChildrenCount(int groupPosition) { // TODO Auto-generated method stub return mData.get(groupPosition).size(); } @Override public List<Item> getGroup(int groupPosition) { // TODO Auto-generated method stub return mData.get(groupPosition); } @Override public Item getChild(int groupPosition, int childPosition) { // TODO Auto-generated method stub return mData.get(groupPosition).get(childPosition); } @Override public long getGroupId(int groupPosition) { // TODO Auto-generated method stub return groupPosition; } @Override public long getChildId(int groupPosition, int childPosition) { // TODO Auto-generated method stub return childPosition; } @Override public boolean hasStableIds() { // TODO Auto-generated method stub return false; } @Override public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) { // TODO Auto-generated method stub if (convertView == null) { convertView = mInflater.inflate(R.layout.group_item_layout, null); } GroupViewHolder holder = new GroupViewHolder(); holder.mGroupName = (TextView) convertView .findViewById(R.id.group_name); holder.mGroupName.setText(mGroupStrings[groupPosition]); holder.mGroupCount = (TextView) convertView .findViewById(R.id.group_count); holder.mGroupCount.setText("[" + mData.get(groupPosition).size() + "]"); return convertView; } @Override public View getChildView(int groupPosition, int childPosition, boolean isLastChild, View convertView, ViewGroup parent) { // TODO Auto-generated method stub if (convertView == null) { convertView = mInflater.inflate(R.layout.child_item_layout, null); } ChildViewHolder holder = new ChildViewHolder(); holder.mIcon = (ImageView) convertView.findViewById(R.id.img); holder.mIcon.setBackgroundResource(getChild(groupPosition, childPosition).getImageId()); holder.mChildName = (TextView) convertView.findViewById(R.id.item_name); holder.mChildName.setText(getChild(groupPosition, childPosition) .getName()); holder.mDetail = (TextView) convertView.findViewById(R.id.item_detail); holder.mDetail.setText(getChild(groupPosition, childPosition) .getDetail()); return convertView; } @Override public boolean isChildSelectable(int groupPosition, int childPosition) { // TODO Auto-generated method stub return true; } private class GroupViewHolder { TextView mGroupName; TextView mGroupCount; } private class ChildViewHolder { ImageView mIcon; TextView mChildName; TextView mDetail; }}
4.MainActivity
package com.xyz.expande;import java.util.ArrayList;import java.util.List;import android.app.Activity;import android.app.AlertDialog;import android.content.DialogInterface;import android.content.DialogInterface.OnClickListener;import android.os.Bundle;import android.view.View;import android.view.ViewGroup.LayoutParams;import android.widget.ExpandableListView;import android.widget.ExpandableListView.OnChildClickListener;public class HomeActivity extends Activity implements OnChildClickListener { private ExpandableListView mListView = null; private ExpandAdapter mAdapter = null; private List<List<Item>> mData = new ArrayList<List<Item>>(); private int[] mGroupArrays = new int[] { R.array.tianlongbabu, R.array.shediaoyingxiongzhuan, R.array.shendiaoxialv }; private int[] mDetailIds = new int[] { R.array.tianlongbabu_detail, R.array.shediaoyingxiongzhuan_detail, R.array.shendiaoxialv_detail }; private int[][] mImageIds = new int[][] { { R.drawable.img_00, R.drawable.img_01, R.drawable.img_02 }, { R.drawable.img_10, R.drawable.img_11, R.drawable.img_12, R.drawable.img_13, R.drawable.img_14, R.drawable.img_15, R.drawable.img_16 }, { R.drawable.img_20, R.drawable.img_21 } }; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); initData(); mListView = new ExpandableListView(this); mListView.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT)); setContentView(mListView); mListView.setGroupIndicator(getResources().getDrawable(R.drawable.expander_floder));//指示扩展ListView展开和关闭的符号 mAdapter = new ExpandAdapter(this, mData); mListView.setAdapter(mAdapter); mListView .setDescendantFocusability(ExpandableListView.FOCUS_AFTER_DESCENDANTS); mListView.setOnChildClickListener(this); } /* * ChildView
@Override public boolean onChildClick(ExpandableListView parent, View v, int groupPosition, int childPosition, long id) { // TODO Auto-generated method stub Item item = mAdapter.getChild(groupPosition, childPosition); new AlertDialog.Builder(this) .setTitle(item.getName()) .setMessage(item.getDetail()) .setIcon(android.R.drawable.ic_menu_more) .setNegativeButton(android.R.string.cancel, new OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { // TODO Auto-generated method stub } }).create().show(); return true; } private void initData() { for (int i = 0; i < mGroupArrays.length; i++) { List<Item> list = new ArrayList<Item>(); String[] childs = getStringArray(mGroupArrays[i]); String[] details = getStringArray(mDetailIds[i]); for (int j = 0; j < childs.length; j++) { Item item = new Item(mImageIds[i][j], childs[j], details[j]); list.add(item); } mData.add(list); } } private String[] getStringArray(int resId) { return getResources().getStringArray(resId); }}
5.因子listview使用了样式,故定义了item来描述其成员
package com.xyz.expande;public class Item { private int resId; private String name; private String detail; public Item(int resId, String name, String detail) { this.resId = resId; this.name = name; this.detail = detail; } public void setImageId(int resId) { this.resId = resId; } public int getImageId() { return resId; } public void setName(String name) { this.name = name; } public String getName() { return name; } public void setDetail(String detail) { this.detail = detail; } public String getDetail() { return detail; } public String toString() { return "Item[" + resId + ", " + name + ", " + detail + "]"; }}
整个过程中需要注意的是
1.适配器数据List<List<Item>>的构造;
2.内外层ListView的样式的设计;
0 0
- 扩展ListView的实现重点(ExpandableListView的强调点)
- 可扩展的listview~ExpandableListView
- android 列表ListView和可扩展列表ExpandableListView的实现
- 4.7 可扩展的Listview : ExpandableListView
- android 实现QQ好友列表(扩展listview:ExpandableListView)
- android 实现QQ好友列表(扩展listview:ExpandableListView)
- android 实现QQ好友列表(扩展listview:ExpandableListView)
- android 实现QQ好友列表(扩展listview:ExpandableListView)
- ExpandableListView实现可展开的ListView(取自真实项目)
- ExpandableListView安卓开发可扩展的listview
- android:ExpandableListView(可扩展的ListView)使用详解;
- listview的使用-ExpandableListView
- ExpandableListView扩展(BaseExpandableListAdapter的使用)
- Listview扩展ExpandableListView
- 可折叠的listview的demo...(listview 嵌套 gridview)ExpandableListView
- ExpandableListView的使用和扩展
- Android开发之ListView实现不同品种分类分隔栏的效果(非ExpandableListView实现)
- Android开发之ListView实现不同品种分类分隔栏的效果(非ExpandableListView实现)
- 字符编码详解及由来(UNICODE,UTF-8,GBK)
- Android-ExifInterface如何正确存取Double类型坐标 .
- MySQL 彻底卸载与安装
- 建议通过从属营销增加利润
- springMVC上传下载
- 扩展ListView的实现重点(ExpandableListView的强调点)
- 英语学习——————20140110
- Spring ReflectionUtils工具类代码
- 45个超实用Javascript技巧
- 几秒前,几分钟前,几小时前,几天前,几月前,几年前的实现
- 11
- erlang递归和尾递归
- 11
- linux下thrift的安装