android--ExpandableListView的简单运用
来源:互联网 发布:军公教 知乎 编辑:程序博客网 时间:2024/05/24 06:38
ExpandableListView组件是android中一个比较常用的组件,当点击一个父item的时候可以将它的子item显示出来,像手机QQ中的好友列表就是实现的类型效果。使用ExpandableListView组件的关键就是设置它的adapter,这个adapter必须继承BaseExpandbaleListAdapter类,所以实现运用ExpandableListView的核心就是学会继承这个BaseExpanableListAdapter类。
下面是一个小例子。
activity_main.xml
<?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context="com.example.expandablelistview.MainActivity"> <ExpandableListView android:layout_width="match_parent" android:layout_height="match_parent" android:id="@+id/list_view"/></RelativeLayout>goods_item.xml
<?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="50dp"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentLeft="true" android:layout_marginLeft="7dp" android:id="@+id/name_tv"/> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_toRightOf="@id/name_tv" android:layout_marginLeft="7dp" android:id="@+id/price_tv"/> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="right" android:layout_alignParentRight="true" android:id="@+id/selltime_tv"/></RelativeLayout>selltime.xml
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent"> <TextView android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@+id/selltime_tv" android:textSize="20sp" android:gravity="left"/></LinearLayout>Goods.java
package com.example.expandablelistview;/** * Created by Lenovo on 2017/4/24. */public class Goods { private String name; private Double price; private String sellTime; public Goods(String name, Double price, String sellTime) { this.name = name; this.price = price; this.sellTime = sellTime; } public Goods() { } public String getName() { return name; } public void setName(String name) { this.name = name; } public Double getPrice() { return price; } public void setPrice(Double price) { this.price = price; } public String getSellTime() { return sellTime; } public void setSellTime(String sellTime) { this.sellTime = sellTime; }}
ViewHolder.java
package com.example.expandablelistview;import android.content.Context;import android.util.SparseArray;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.widget.TextView;/** * Created by Lenovo on 2017/4/24. */public class ViewHolder { //保存所有视图的集合 private SparseArray<View> mViews; //转换视图 private View mConvertView; private ViewHolder(Context mContext, ViewGroup parent,int layoutId){ mViews = new SparseArray<>(); mConvertView = LayoutInflater.from(mContext).inflate(layoutId,parent,false); mConvertView.setTag(this); } public static ViewHolder get(Context context, View convertView,ViewGroup parent,int layoutId){ ViewHolder viewHolder; if(convertView == null){ viewHolder = new ViewHolder(context,parent,layoutId); }else{ viewHolder = (ViewHolder) convertView.getTag(); } return viewHolder; } public <T extends View> T getView(int viewId){ View view = mViews.get(viewId); //判断视图是否保存过 if(view == null){ view = mConvertView.findViewById(viewId); mViews.put(viewId,view); } return (T)view; } /** * 返回ConvertView * @return */ public View getConvertView(){ return mConvertView; } public ViewHolder setTextViewText(int viewId,String text){ TextView textView = getView(viewId); textView.setText(text); return this; } }MyExpandableListViewAdapter.java
package com.example.expandablelistview;import android.content.Context;import android.text.Layout;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.widget.BaseExpandableListAdapter;import java.util.List;import java.util.Map;/** * Created by Lenovo on 2017/4/24. */public class MyExpandableListViewAdapter extends BaseExpandableListAdapter { //上下文 private Context mContext; //所有数据 private Map<String,List<Goods>> mData; //组集合 private List<String> mGroups; //打气筒 private LayoutInflater mInflater; //构造函数 public MyExpandableListViewAdapter(Context mContext, Map<String, List<Goods>> mData, List<String> mGroups) { this.mContext = mContext; this.mData = mData; this.mGroups = mGroups; mInflater = LayoutInflater.from(mContext); } //返回组的数量 @Override public int getGroupCount() { return mGroups.size(); } //返回子项目的数量 @Override public int getChildrenCount(int groupPosition) { String group = mGroups.get(groupPosition); List<Goods> list = mData.get(group); return list.size(); } //获取组 @Override public Object getGroup(int groupPosition) { String group = mGroups.get(groupPosition); return group; } //获取子项目 @Override public Object getChild(int groupPosition, int childPosition) { String group = mGroups.get(groupPosition); List<Goods> list = mData.get(group); return list.get(childPosition); } //获得组的id @Override public long getGroupId(int groupPosition) { return groupPosition; } //获取字项目的id @Override public long getChildId(int groupPosition, int childPosition) { return childPosition; } //返回组的视图 @Override public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) { ViewHolder viewHolder = ViewHolder.get(mContext,convertView,parent,R.layout.selltime_item); viewHolder.setTextViewText(R.id.selltime_tv,mGroups.get(groupPosition)); return viewHolder.getConvertView(); } //返回组中子项目的视图 @Override public View getChildView(int groupPosition, int childPosition, boolean isLastChild, View convertView, ViewGroup parent) { ViewHolder viewHolder = ViewHolder.get(mContext,convertView,parent,R.layout.goods_item); String group = mGroups.get(groupPosition); List<Goods> list = mData.get(group); Goods goods = list.get(childPosition); viewHolder.setTextViewText(R.id.name_tv,goods.getName()); viewHolder.setTextViewText(R.id.price_tv,"价格:"+goods.getPrice()); viewHolder.setTextViewText(R.id.selltime_tv,goods.getSellTime()); return viewHolder.getConvertView(); } @Override public boolean hasStableIds() { return false; } @Override public boolean isChildSelectable(int groupPosition, int childPosition) { return false; }}MainActivity.java
package com.example.expandablelistview;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.view.View;import android.widget.ExpandableListView;import java.util.ArrayList;import java.util.HashMap;import java.util.List;import java.util.Map;public class MainActivity extends AppCompatActivity { private ExpandableListView mListView; private List<Goods> mGoods; private Map<String,List<Goods>> mData; private List<String> mGroups; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); initData(); initView(); } private void initView() { mListView = (ExpandableListView) findViewById(R.id.list_view); //消掉组上的那个箭头 mListView.setGroupIndicator(null); MyExpandableListViewAdapter adapter = new MyExpandableListViewAdapter(this,mData,mGroups); //设置适配器 mListView.setAdapter(adapter); convertData(); expandGroup(); } private void initData() { mGoods = new ArrayList<>(); mData = new HashMap<>(); mGroups = new ArrayList<>(); //模拟数据 mGoods.add(new Goods("苹果电脑",10000.0,"2011-1-1")); mGoods.add(new Goods("苹果手机",4000.0,"2011-1-1")); mGoods.add(new Goods("联想电脑",5000.0,"2011-2-2")); mGoods.add(new Goods("联想手机",3000.0,"2011-2-2")); mGoods.add(new Goods("华为电脑",5000.0,"2011-3-3")); mGoods.add(new Goods("华为手机",4000.0,"2011-3-3")); mGoods.add(new Goods("战神电脑",8000.0,"2011-5-1")); } private void expandGroup(){ //一显示界面,就让组全部展开 for(int i = 0; i < mGroups.size(); i++){ mListView.expandGroup(i); } //设置监听,返回true代表组不能在合起来 mListView.setOnGroupClickListener(new ExpandableListView.OnGroupClickListener() { @Override public boolean onGroupClick(ExpandableListView parent, View v, int groupPosition, long id) { return true; } }); } /** * 将数据转变想要的格式 */ private void convertData(){ for(Goods good : mGoods){ //当这个时间不在组中就要添加到组中 if(!mGroups.contains(good.getSellTime())){ mGroups.add(good.getSellTime()); List<Goods> list = new ArrayList<>(); list.add(good); mData.put(good.getSellTime(),list); }else{ //已经存在啦,就只用添加子项目 mData.get(good.getSellTime()).add(good); } } }}运行结果:
虽然布局比较丑,但是用法就是这样用的,这里的ViewHolder是自己编写成一个通用的ViewHolder了。可以看看。
0 1
- android--ExpandableListView的简单运用
- android学习:ExpandableListView的运用
- android里面ExpandableListView 的运用
- Android ExpandableListView 的简单使用
- android ExpandableListView 简单实例
- Android ExpandableListView简单例子
- android ExpandableListView简单使用
- 【Android】PopupWindow的简单运用
- android-传感器的简单运用
- ExpandableListView的简单例子
- ExpandableListView的简单例子
- ExpandableListView 的简单用法
- ExpandableListView的简单实现
- ExpandableListView的简单使用
- ExpandableListView的简单使用
- ExpandableListView的简单例子
- ExpandableListView的简单使用
- android中经常用到的 ExpandableListView 的简单使用
- 《Python实现DNS解析查询》
- UVA116
- SQLite--日期 & 时间
- 分页逻辑的实现
- 【JZOJ 5050】 颜色树
- android--ExpandableListView的简单运用
- 使用C++文件流库fstream,读写操作十六进制文本文件
- 【转载】序列化框架性能对比(kryo、hessian、java、protostuff)
- C++闭包,一样很简单
- 腾讯前端十日训练营结业项目
- 使用意法的STM32CubeMX工具软件进行系统设计和检查(草稿)
- 《爬取京东机票一周最低价格》
- leetcode 216 Combination Sum II (回溯法)
- 安装ubuntu16.04后要做的事情