android的ListView点击item使item展开的做法的实现代码

 更新时间:2018年12月11日 10:23:53   作者:nickcau  
这篇文章主要介绍了android的ListView点击item使item展开的做法的实现代码,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

本文介绍了android的ListView点击item使item展开的做法的实现代码,分享给大家,具体如下:

效果图:

原理是点击item的时候,重新measure list的各个item的高度

list.setOnItemClickListener(new OnItemClickListener() {
 
  @Override
  public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
   MyData data = myList.get(position);
   if (oldPostion == position) {
     if (data.expand) {
      oldPostion = -1;
     }
     data.expand = !data.expand;
   }else{
     oldPostion = position;
     data.expand = true;
   }
    
   int totalHeight = 0;
   for(int i=0;i<myAdapter.getCount();i++) {
     View viewItem = myAdapter.getView(i, null, list);
     viewItem.measure(0, 0);
     totalHeight += viewItem.getMeasuredHeight();
   }
    
   ViewGroup.LayoutParams params = list.getLayoutParams();
   params.height = totalHeight
      + (list.getDividerHeight() * (list.getCount() - 1));
   list.setLayoutParams(params);
   myAdapter.notifyDataSetChanged();
  }
});

adapter:

private class myAdapter extends BaseAdapter{
 
  @Override
  public int getCount() {
   return myList.size();
  }
 
  @Override
  public Object getItem(int position) {
   return myList.get(position);
  }
 
  @Override
  public long getItemId(int position) {
   return position;
  }
 
  @Override
  public View getView(int position, View convertView, ViewGroup parent) {
    
   MyTag tag = new MyTag();
   MyData data = myList.get(position);
   if(convertView == null) {
     convertView = inflater.inflate(R.layout.expand_item_layout, null);
     tag.item1 = (TextView)convertView.findViewById(R.id.item1);
     tag.item2 = (RelativeLayout)convertView.findViewById(R.id.item2);
     convertView.setTag(tag);
   }else{
     tag = (MyTag)convertView.getTag();
   }
   if(data.expand) {
     tag.item2.setVisibility(View.VISIBLE);
   }else{
     tag.item2.setVisibility(View.GONE);
   }
    
   tag.item1.setText(data.name);
   return convertView;
  }
  
}
 
private class MyTag{
  private TextView item1;
  private RelativeLayout item2;
}
 
private class MyData{
  boolean expand;
  String name;
}

代码在https://github.com/nickgao1986/StepSport

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • android 大图片拖拽并缩放实现原理

    android 大图片拖拽并缩放实现原理

    android 大图片拖拽缩放有利于用户体验,在开发过程中经常使用到,这篇图片拖拽缩放也是我在项目中用到的,今天整理一下,将源码奉献给大家,希望对大家以后碰到相似的问题有帮助
    2013-01-01
  • Android文件存储SharedPreferences源码解析

    Android文件存储SharedPreferences源码解析

    SharedPreferences是安卓平台上一个轻量级的存储类,用来保存应用的一些常用配置,比如Activity状态,Activity暂停时,将此activity的状态保存到SharedPereferences中;当Activity重载,系统回调方法onSaveInstanceState时,再从SharedPreferences中将值取出
    2022-08-08
  • Android Spinner与适配器模式详解及实例代码

    Android Spinner与适配器模式详解及实例代码

    这篇文章主要介绍了Android Spinner与适配器模式详解相关资料,并附代码实例,需要的朋友可以参考下
    2016-10-10
  • Android编程实现根据经纬度查询地址并对获取的json数据进行解析的方法

    Android编程实现根据经纬度查询地址并对获取的json数据进行解析的方法

    这篇文章主要介绍了Android编程实现根据经纬度查询地址并对获取的json数据进行解析的方法,结合实例形式分析了Android的经纬度地址解析与json格式数据操作相关技巧,需要的朋友可以参考下
    2017-02-02
  • Android权限控制之自定义权限

    Android权限控制之自定义权限

    这篇文章主要介绍了Android权限控制之自定义权限,本文使用两个APP作为范例,讲解如何自定义权限,需要的朋友可以参考下
    2015-04-04
  • Android 自定义SeekBar 实现分段显示不同背景颜色的示例代码

    Android 自定义SeekBar 实现分段显示不同背景颜色的示例代码

    这篇文章主要介绍了Android 自定义SeekBar 实现分段显示不同背景颜色,本文通过示例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-06-06
  • Android自定义实现顶部粘性下拉刷新效果

    Android自定义实现顶部粘性下拉刷新效果

    这篇文章主要为大家详细介绍了Android自定义实现顶部粘性下拉刷新效果,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-10-10
  • Android实现跨进程接口回掉的方法

    Android实现跨进程接口回掉的方法

    这篇文章主要给大家介绍了关于Android如何实现跨进程接口回掉的相关资料,文中通过示例代码介绍的非常详细,对各位Android开发者们具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-05-05
  • Android自定义滚动选择器实例代码

    Android自定义滚动选择器实例代码

    本篇文章主要介绍了Android自定义滚动选择器实例代码,具有一定的参考价值,有兴趣的可以了解一下。
    2017-01-01
  • android编程实现悬浮窗体的方法

    android编程实现悬浮窗体的方法

    这篇文章主要介绍了android编程实现悬浮窗体的方法,以实例形式较为详细的分析了Android悬浮窗体的权限控制、布局及功能实现技巧,非常具有实用价值,需要的朋友可以参考下
    2015-11-11

最新评论