说明
在我们开发项目的过程中,有时候会遇到这样的需求,就是首先显示一个列表,可以用ListView或者RecycleView实现,每个item都有一个向下箭头,然后点击列表的每个item条目,下边就又会出现一些内容,此时箭头方向朝上,再次点击item条目,下边新出现的内容隐藏,箭头又会回到初始时向下的方向,效果如下:
礼包.jpg
ok,效果就是这样的,这里有3种应用场景:
第一种是listview的单个item展开;
第二种是listview的所有item展开;
第三种是表格布局item展开;
那么接下来我们就逐个分析这几个效果实现的思路,然后再去带大家去实现这个效果,我们首先来看我们第一种情况 —— 单个item展开 。
思路分析
2.1 单个item展开思路分析及代码实现
2.1.1 首先可以使用ListView先来实现下这个列表;
2.1.2 然后在自己定义的Adapter的最外层定义一个private int currentItem = -1,用于记录点击的item的position,这个是控制item展开的核心;
2.1.3 然后在getView()方法中给你设置点击事件的这个控件设置tag标记值;
2.1.4 然后根据currentItem 记录点击位置来设置对应item的可见性;
2.1.5 然后可以给整个显示的区域一个点击事件或者只是给箭头一个点击事件,比如我这边就给item的显示的部分整体设置点击事件,然后取出tag,判断如果tag ==currentItem,就设置一个设置一个无效值,否则就让tag=currentItem ;
2.1.6 最后通知adapter数据改变了需要刷新数据;
自定义的Adapter中具体实现如下:
/**
* 点击item展开隐藏部分,再次点击收起
* 只可展开一条记录
*
* @author JackChen
* @date 2016.01.31
*/
public class OneExpandAdapter extends BaseAdapter {
private Context context;
private ArrayList> list;
private int currentItem = -1; //用于记录点击的 Item 的 position,是控制 item 展开的核心
public OneExpandAdapter(Context context,
ArrayList> list) {
super();
this.context = context;
this.list = list;
}
@Override
public int getCount() {
return list.size();
}
@Override
public Object getItem(int position) {
return list.get(position);
}
@Ove