在ListView中嵌套ListView的事件处理

转载 2016年08月30日 15:57:18

前天在工作中遇到在ListView中的Item需要用ListView来展现处理后的内容,然后就遇到了一个很头疼的问题,作为Item的ListView没法进行滑动,而且显示也不正常,只是显示几个子Item。不能将子Item全部显示,原因是在控件绘制出来之前要对ListView的大小进行计算,要解决将子ListView全部显示出来的问题,就是重新计算一下其大小告知系统即可。后面这个问题比较好解决,网上已经给出解决方案:

前辈们给出了一个方法,重新计算子ListView的大小,然后在设置本ListView的Adapter之后运行这个方法就好了,具体代码如下:

    

01 /**
02  
03      * 设置Listview的高度
04  
05      */ 
06  
07     public voidsetListViewHeight(ListView listView) {  
08  
09         ListAdapter listAdapter = listView.getAdapter();   
10  
11         if(listAdapter == null) {  
12  
13             return;  
14  
15         }  
16  
17         inttotalHeight = 0;  
18  
19         for (inti = 0; i < listAdapter.getCount(); i++) {  
20  
21             View listItem = listAdapter.getView(i, null, listView);  
22  
23             listItem.measure(00);  
24  
25             totalHeight += listItem.getMeasuredHeight();  
26  
27         }  
28  
29         ViewGroup.LayoutParams params = listView.getLayoutParams();  
30  
31         params.height = totalHeight + (listView.getDividerHeight() * (listAdapter.getCount() - 1));  
32  
33         listView.setLayoutParams(params); 
34  
35     }

但是这个方法设置的item的Layout必须是带有onMeasure()方法的控件,否则在计算的时候会报错,建议使用LinearLayout

再一个思路相同,但是,不是额外做方法来实现onMeasure()方法的计算LIstView的大小,而是自己继承ListView,重写ListView的onMeasure()方法,来自己计算ListView的高度,然后再xml中直接使用这个自定义的ListView就可以了。

01 public class MyListView extendsListView {
02  
03     public MyListView  (Context context, AttributeSet attrs) {
04  
05         super(context, attrs);
06  
07     }
08  
09     public MyListView  (Context context) {
10  
11         super(context);
12  
13     }
14  
15     public  MyListView  (Context context, AttributeSet attrs, intdefStyle) {
16  
17         super(context, attrs, defStyle);
18  
19     }
20  
21     @Override
22  
23     public void onMeasure(int widthMeasureSpec, intheightMeasureSpec) {
24  
25         intexpandSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2,
26  
27                 MeasureSpec.AT_MOST);
28  
29         super.onMeasure(widthMeasureSpec, expandSpec);
30  
31     }
32  
33 }

这是解决让作为Item的ListView显示全部内容的方案,但是有些时候我们是想让作为Item的ListView不用全部显示,而是可以进行滑动,要解决这个问题就需要了解一下android对事件的分发机制了

原文地址: http://blog.csdn.net/subaohao/article/details/8250186



相关文章推荐

[Android]在ListView嵌套GridView中出现的点击事件处理以及gridview显示不全的问题

写这篇博文也是出于偶然看到自己很久以前写的一堆“烂码”,目的是为了实现一个ListView中能够嵌入GridView的功能,为了展示图文的一个Item,这是一个很普通的功能,但在那时候什么都不懂的我还...

listview的事件处理

  • 2015年12月02日 09:17
  • 2.39MB
  • 下载

事件处理ListView

  • 2015年02月11日 10:39
  • 1.97MB
  • 下载

ListView长按事件处理

ListView是比较常用的控件,但一直都觉得创建ListView步骤有点繁琐,故在此总结一下,方便查阅。 程序效果是实现一个ListView,ListView里面有标题,内容和图片,并加入点击和长...

从ListView与ScrollView的冲突调查android view的事件处理机制

当我们做项目时经常会遇到整体界面需要滑动,此页面中又有ListView的 情况。比如说:某法院系统的提交诉讼材料界面,这种界面要提交很多元素,其中想证人可能有多个,就会用到ListView。但这种Sc...

ListView 中 item的事件处理

欢迎使用Markdown编辑器写博客本Markdown编辑器使用StackEdit修改而来,用它写博客,将会带来全新的体验哦: Markdown和扩展Markdown简洁的语法 代码块高亮 图片链接和...

listview的item长按事件处理的两种方法

要实现ListView的长按点击事件,可以直接调用setOnItemLongClickListener,在onLongClick里面实现逻辑,也可以使用注册上下文菜单的方法,比如要实现下面的效果 ...

android listview综合使用示例_结合数据库操作和listitem单击长按等事件处理

本示例说明: 1.自定义listview条目样式,自定义listview显示列数的多少,灵活与数据库中字段绑定. 2.实现对DB的增删改查,并且操作后listview自动刷新. 3.响应用户操作...
  • lk_blog
  • lk_blog
  • 2012年05月05日 12:16
  • 42933

在ListView中嵌套ListView的事件处理

在ListView中嵌套ListView的事件处理         前天在工作中遇到在ListView中的Item需要用ListView来展现处理后的内容,然后就遇到了一个很头疼的问题...

记录我项目中遇到的问题-----listview itme双击事件与CheckBox冲突事件处理

作为小菜鸟 记录自己在项目中遇到的的问题
  • qazzwx
  • qazzwx
  • 2016年01月26日 11:28
  • 109
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:在ListView中嵌套ListView的事件处理
举报原因:
原因补充:

(最多只允许输入30个字)