一个比较实用的EapandableListView,样式如附件:

1。在xml添加EapandalbeListView,然后添加一个每项的内容search_result_item.xml

... 
<ExpandableListView android:id="@+id/searchResultsort" android:layout_height="fill_parent" android:layout_width="fill_parent" style="@style/view" android:background="#FFFFFF" />...

2.代码片段

public class Main extends LinearLayout implements ImageRecyle{/** * 封装分类的搜索结果类的实例 */private ExpandableListView listView;private SearchExpandableAdapter seadapter;/** * 上下文对象   */private Context mContext;/** * 选项被选中是的背景色 */public static final int SELECTED_ITEM_COLOR = 0xFFaaddFF;/** * 构造函数 *  * @param context  上下文对象   */public SearchResultSort(final Context context){super(context);mContext = context;// 获取页面布局View mainView = LayoutInflater.from(context).inflate(R.main, this);// 获取封装好的搜索结果列表listView = (ExpandableListView) findViewById(R.id.searchResultsort);seadapter=new SearchExpandableAdapter(mContext);listView.setAdapter(seadapter);// 获取搜索列表的分组数量int groupCount = listView.getCount();if (groupCount > 0){// 展开第一个组listView.expandGroup(0);}// 设置子元素被点击的事件监听listView.setOnChildClickListener(new OnChildClickListener(){public boolean onChildClick(ExpandableListView parent, View v, int groupPosition,            int childPosition, long id){//对选中项进行操作// 将所有的列表项中的颜色清空int visStart = listView.getFirstVisiblePosition();int visEnd = listView.getLastVisiblePosition();View viewTemp;for (int i = 0; i <= visEnd - visStart; i++){viewTemp = listView.getChildAt(i);if (viewTemp != null && viewTemp.getTag() != null){viewTemp.setBackgroundColor((Integer) viewTemp.getTag());}}// 设置点击的子元素listView.setSelectedChild(groupPosition, childPosition, true);// 设置被点击子元素的背景颜色v.setBackgroundColor(SELECTED_ITEM_COLOR);return true;}});}/** * 分类列表适配器 */private class SearchExpandableAdapter extends BaseExpandableListAdapter{// 上下文对象private Context mContext;// 分类的组集合private String[] groups ={ "Music(3", "Video(5" };/** * 构造函数 *  * @param context  上下文对象  */public SearchExpandableAdapter(Context context){super();mContext = context;}/** * 获取子元素对象 *  * @param groupPosition 子元素所在的组集合位置 * @param childPosition 子元素所在元素集合的位置 * @return  子元素对象   */public Object getChild(int groupPosition, int childPosition){return null;}/** * 获取子元素所在元素集合的位置 *  * @param groupPosition 子元素所在的组集合位置 * @param childPosition 子元素所在元素集合的位置 * @return  子元素所在元素集合的位置  */public long getChildId(int groupPosition, int childPosition){return childPosition;}/** * 获取给定组的子元素的个数 *  * @param groupPosition 组的位置 * @return  该组子元素的个数  */public int getChildrenCount(int groupPosition){return picIds[groupPosition].length;}/** * 获取组的视图 *  * @return  组的视图   */public TextView getGroupView(){AbsListView.LayoutParams lp = new AbsListView.LayoutParams(ViewGroup.LayoutParams.FILL_PARENT, 38);TextView textView = new TextView(mContext);textView.setBackgroundResource(R.drawable.search_bg_list_small);textView.setTextSize(14f);textView.setLayoutParams(lp);textView.setTextColor(0xBB000000);textView.setTypeface(Typeface.defaultFromStyle(Typeface.BOLD));textView.setGravity(Gravity.CENTER_VERTICAL | Gravity.LEFT);textView.setPadding(35, 0, 0, 0);return textView;}/** * 获取分组的视图 *  * @param groupPosition 分组的位置 * @param isExpanded 是否已经展开 * @param convertView 转换视图 * @param parent 父元素视图 * @return   分组的视图 */public View getGroupView(int groupPosition, boolean isExpanded,View convertView, ViewGroup parent){TextView textView = getGroupView();textView.setText(getGroup(groupPosition).toString());return textView;}/** * 获取子元素的视图 *  * @param groupPosition 子元素所在的组集合位置 * @param childPosition 子元素所在元素集合的位置 * @param isLastChild 是否是最后一个子元素 * @param convertView 转换视图 * @param parent 父元素视图 * @return 子元素的视图    */public View getChildView(int groupPosition, int childPosition,boolean isLastChild, View convertView, ViewGroup parent){ImageView listImage;TextView searchTitle;TextView searchSinger;TextView searchPay;final RatingBar searchStars;if (convertView == null){//获得viewconvertView = LayoutInflater.from(mContext).inflate(R.layout.search_result_item, parent, false);}listImage = (ImageView) convertView.findViewById(R.id.searchImage);searchTitle = (TextView) convertView.findViewById(R.id.searchTitle);searchStars = (RatingBar) convertView.findViewById(R.id.searchStars);searchPay = (TextView) convertView.findViewById(R.id.searchPay);if (listImage != null){   Bitmap temp = BitmapFactory.decodeResource(mContext.getResources(), picIds[groupPosition][childPosition]);listImage.setImageBitmap(temp);}if (searchTitle != null){String ellipsisStr = (String) TextUtils.ellipsize(titles[groupPosition][childPosition],(TextPaint) searchTitle.getPaint(), 150,TextUtils.TruncateAt.END);searchTitle.setText(ellipsisStr);ellipsisStr = (String) TextUtils.ellipsize(singers[groupPosition][childPosition],(TextPaint) searchTitle.getPaint(), 150,TextUtils.TruncateAt.END);searchSinger.setText(ellipsisStr);}if (searchStars != null){searchStars.setNumStars(5);searchStars.setRating(stars[groupPosition][childPosition]);}if (childPosition % 2 == 1){convertView.setBackgroundColor(0xfff6f6f6);convertView.setTag(0xfff6f6f6);}else{convertView.setBackgroundColor(0xFFFFFFFF);convertView.setTag(0xFFFFFFFF);}return convertView;}/** * 获取组对象 *  * @param groupPosition 所在组的位置 * @return  组对象   */public Object getGroup(int groupPosition){return groups[groupPosition];}/** * 获取分组的个数 *  * @return  分组的个数   */public int getGroupCount(){return groups.length;}/** * 获取分组的位置 *  * @param groupPosition 分组的位置 * @return  分组的位置   */public long getGroupId(int groupPosition){return groupPosition;}/** * 子元素是否可选 *  * @param groupPosition 子元素所在的组集合位置 * @param childPosition 子元素所在元素集合的位置 * @return ture  */public boolean isChildSelectable(int groupPosition, int childPosition){return true;}public boolean hasStableIds(){return true;}}// 组包含的子元素集合private String[][] titles ={{ "Scarborough Fair", "Gloomy Sunday", "Fleurs Du Mai" },{ "Time ", "You", } };private int[][] picIds ={{ R.drawable.pic_list_01, R.drawable.pic_list_02,R.drawable.pic_list_03 },{ R.drawable.pic_list_04, R.drawable.music_list_06,R.drawable.music_list_13 }};private float[][] stars ={{ 4, 5, 4 },{ 4, 4 } };

更多相关文章

  1. android按屏幕大小动态确定控件位置及大小
  2. DelphiXE Android的所有权限按照分类总结说明
  3. Android动画之translate(位移动画)
  4. Android(安卓)studio 下载安装
  5. Appium的安装及简单的使用介绍
  6. android实现gif图与文字混排
  7. Android(安卓)Frame动画demo
  8. Android性能分析
  9. Android(安卓)如何在代码中动态的添加View 及 指定位置

随机推荐

  1. Android(安卓)Studio 下debug情况下直接
  2. 卡拉OK歌词原理和实现高仿Android网易云
  3. Android实现一个简单的SQLite数据库的增
  4. Android自定义View --来回滚动背景
  5. Android(安卓)Alert Dialog解决点击按钮
  6. Android之Activity之间的数据通信方式大
  7. iOS Bug 太多,苹果终于坐不住了!
  8. 哪些手机可升级安卓5.0?Android(安卓)5.0
  9. Android(安卓)4.0的图形硬件加速及绘制技
  10. Android帧缓冲区(Frame Buffer)硬件抽象层(H