热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

实现listview条目点击显示和隐藏

##实现listview条目点击显示和隐藏-主要修改适配器的getView方法声明int类型clickPosition记录点击的条目positionpublicintclickPositio

##实现listview条目点击显示和隐藏

-主要修改适配器的getView方法

  • 声明int类型 clickPosition
//记录点击的条目position
public int clickPosition = -1;
  • 判断clickPosition是不是和当前的position相同
if(clickPosition == position){
//当前是为点击的条目
}else{
//当前不是点击的条目
}
  • 为点击条目时,再判断条目是折叠还是伸展状态
if (vh.problem_arrow.isSelected()) {//当条目状态图标为选中时,说明该条目处于展开状态,此时让它隐藏,并切换状态图标的状态。
vh.problem_arrow.setSelected(false);
vh.ll_hide.setVisibility(View.GONE);
Log.e("listview","if执行");
clickPosition=-1;//隐藏布局后需要把标记的position去除掉,否则,滑动listview让该条目划出屏幕范围,
// 当该条目重新进入屏幕后,会重新恢复原来的显示状态。经过打log可知每次else都执行一次 (条目第二次进入屏幕时会在getview中寻找他自己的状态,相当于重新执行一次getview)
//因为每次滑动的时候没标记得position填充会执行click
} else {//当状态条目处于未选中时,说明条目处于未展开状态,此时让他展开。同时切换状态图标的状态。
vh.problem_arrow.setSelected(true);
vh.ll_hide.setVisibility(View.VISIBLE);
Log.e("listview","else执行");
}
  • 不是点击的条目时,使其折叠
//当填充的条目position不是刚才点击所标记的position时,让其隐藏,状态图标为false
//而之前的滑动(未标记条目的填充)时,执行此处逻辑,已经把状态图片的selected置为false。所以上面的else中的逻辑会在标记过的条目第二次进入屏幕时执行,如果之前的状态是显示,是没什么影响的,再显示一次而已,用户看不出来,但是如果是隐藏状态,就会被重新显示出来
vh.ll_hide.setVisibility(View.GONE);
vh.selectorImg.setSelected(false);
Log.e("listview","状态改变");
  • 设置点击事件,当某个条目点击时,clickPosition设置为当前position
vh.problem_click.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
clickPosition = position;//记录点击的position
notifyDataSetChanged();//刷新adapter重新填充条目。在重新填充的过程中,被记录的position会做展开或隐藏的动作,具体的判断看上面代码
//在此处需要明确的一点是,当adapter执行刷新操作时,整个getview方法会重新执行,也就是条目重新做一次初始化被填充数据。
//所以标记position,不会对条目产生影响,执行刷新后 ,条目重新填充当,填充至所标记的position时,我们对他处理,达到展开和隐藏的目的。
//明确这一点后,每次点击代码执行逻辑就是 onclick()---》getview()
}
});

具体的例子我在github上有上传 请看https://github.com/StevenHX/Listview_itemHideShow.git
如果觉得好不要忘了star哦!!!

推荐阅读
author-avatar
nnnnllll
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有