ExpandableListView
16lz
2021-01-24
一个比较实用的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 } };
更多相关文章
- android按屏幕大小动态确定控件位置及大小
- DelphiXE Android的所有权限按照分类总结说明
- Android动画之translate(位移动画)
- Android(安卓)studio 下载安装
- Appium的安装及简单的使用介绍
- android实现gif图与文字混排
- Android(安卓)Frame动画demo
- Android性能分析
- Android(安卓)如何在代码中动态的添加View 及 指定位置