当前位置: 首页 > 编程笔记 >

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

姬寂离
2023-03-14
本文向大家介绍android的ListView点击item使item展开的做法的实现代码,包括了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 ListView的Item点击效果的定制,包括了Android ListView的Item点击效果的定制的使用技巧和注意事项,需要的朋友参考一下 Android ListView的Item点击效果的定制           前言:           对于listview Android开发的朋友都知道用的很多,网上关于Android ListView的Item点击特

  • 本文向大家介绍Android开发实现ListView点击item改变颜色功能示例,包括了Android开发实现ListView点击item改变颜色功能示例的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了Android开发实现ListView点击item改变颜色功能。分享给大家供大家参考,具体如下: 一、先看看效果图: 二、实现步骤: 1. xml布局 2. activity里加载适配器完后

  • 本文向大家介绍Android中ListView的item点击没有反应的解决方法,包括了Android中ListView的item点击没有反应的解决方法的使用技巧和注意事项,需要的朋友参考一下 如果stu_item.xml里面包括button或者checkbox等控件,默认情况下list的item会失去焦点,导致无法响应item的事件,最常用的解决办法是在stu_item.xml的布局文件中设置de

  • 本文向大家介绍Android实现带有边框的ListView和item的方法,包括了Android实现带有边框的ListView和item的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了Android实现带有边框的ListView和item的方法。分享给大家供大家参考,具体如下: 想为ListView和item四周添加边框有两种方法: 1.贴一张带有边框效果的背景图 2.自定义Draw

  • 主要内容:本节引言:,1.要点讲解:,2.代码实现:,3.代码下载:,本节小结:本节引言: 本节是ListView这个小节的最后一节,给大家带来的是ListView多布局Item的实现, 何为ListView Item多布局,打个比方,QQ这种聊天列表: 假如他是用一个ListView做的,那么一个ListView上不就有两种不同的Item咯! 一左一右,嘿嘿,本节就来教大家如何实现ListView的多布局! 1.要点讲解: 重写getItemViewType()方法对应Vi

  • 本文向大家介绍Android 中ListView的Item点击事件失效的快速解决方法,包括了Android 中ListView的Item点击事件失效的快速解决方法的使用技巧和注意事项,需要的朋友参考一下 在平常的开发过程中,我们的ListView可能不只是简单的显示下文本或者按钮,更多的是显示复杂的布局,这样的话,我们就得自己写布局和自定义adapter了,一般是继承于BaseAdapter,示例