listview嵌套listview视图显示不全以及子listview不能滑动的处理
来源:互联网 发布:威锋网office for mac 编辑:程序博客网 时间:2024/05/21 06:33
在工作中遇到在ListView中的Item需要用ListView来展现处理后的内容,然后就遇到了一个很头疼的问题,作为Item的ListView没法进行滑动,而且显示也不正常,只是显示几个子Item。不能将子Item全部显示,原因是在控件绘制出来之前要对ListView的大小进行计算,要解决将子ListView全部显示出来的问题,就是重新计算一下其大小告知系统即可。后面这个问题比较好解决,网上已经给出解决方案:
前辈们给出了一个方法,重新计算子ListView的大小,然后在设置本ListView的Adapter之后运行这个方法就好了,具体代码如下
/**
* 设置Listview的高度
*/
public void setListViewHeight(ListView listView) {
ListAdapter listAdapter = listView.getAdapter();
if (listAdapter == null) {
return;
}
int totalHeight = 0;
for (int i = 0; i < listAdapter.getCount(); i++) {
View listItem = listAdapter.getView(i, null, listView);
listItem.measure(0, 0);
totalHeight += listItem.getMeasuredHeight();
}
ViewGroup.LayoutParams params = listView.getLayoutParams();
params.height = totalHeight + (listView.getDividerHeight() * (listAdapter.getCount() - 1));
listView.setLayoutParams(params);
}
但是这个方法设置的item的Layout必须是带有onMeasure()方法的控件,否则在计算的时候会报错,建议使用LinearLayout。
再一个思路相同,但是,不是额外做方法来实现onMeasure()方法的计算LIstView的大小,而是自己继承ListView,重写ListView的onMeasure()方法,来自己计算ListView的高度,然后再xml中直接使用这个自定义的ListView就可以了
public class MyListView extends ListView {
public MyListView (Context context, AttributeSet attrs) {
super(context, attrs);
}
public MyListView (Context context) {
super(context);
}
public MyListView (Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}
@Override
public void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
int expandSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2,
MeasureSpec.AT_MOST);
super.onMeasure(widthMeasureSpec, expandSpec);
}
}
这是解决让作为Item的ListView显示全部内容的方案,但是有些时候我们是想让作为Item的ListView不用全部显示,而是可以进行滑动,要解决这个问题就需要了解一下android对事件的分发机制了。
我的解决方案是集成ListView,重写interceptTouchEvent使其返回false来取消父ListView对触摸事件的拦截,将触摸事件分发到子View来处理。然后在使用的时候,将其作为父ListView使用,就可以使子ListView可以滑动了。思想来源于下面链接的6楼
具体自定义父ListView代码 :
public class ParentListView extends ListView {
public ParentListView(Context context) {
super(context);
// TODO Auto-generated constructor stub
}
public ParentListView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
// TODO Auto-generated constructor stub
}
public ParentListView(Context context, AttributeSet attrs) {
super(context, attrs);
// TODO Auto-generated constructor stub
}
//将 onInterceptTouchEvent的返回值设置为false,取消其对触摸事件的处理,将事件分发给子view
@Override
public boolean onInterceptTouchEvent(MotionEvent ev) {
// TODO Auto-generated method stub
return false;
}
}
上面的方法同样适合在ScrollView中嵌套可以滑动View的情况。
- listview嵌套listview视图显示不全以及子listview不能滑动的处理
- listview嵌套listview子listview显示不全的问题
- listview 嵌套listView显示不全的处理方式
- android listview嵌套时,显示不全和不能滑动的解决
- 解决ScrollView嵌套ListView滑动冲突显示不全的问题
- 解决ListView嵌套在ScrollerView中显示不全以及滑动冲突的问题
- ListView嵌套出现子Listview显示不全问题解决
- 在ListView中嵌套ListView的事件处理(listview显示不全)
- listview嵌套listview,底部的listview不能滑动问题
- ScrollView嵌套ListView显示不全的解决
- ScrolView 嵌套ListView 显示不全的问题
- listview嵌套GridView显示不全的问题
- 解决ScrollView嵌套ListView或ListView嵌套ListView,listview显示不全的问题
- ListView头部嵌套ListView显示不全解决方法
- scorll嵌套listview,显示不全
- ScrollView嵌套 ListView显示不全
- Android ScrollView里嵌套listview,listview显示不全的问题
- android ScrollView嵌套ListView listview显示不全的问题
- hdu2795
- zabbix
- 继承
- ZooKeeper学习第八期——ZooKeeper伸缩性
- mac配置libevet出现bufferevent_openssl.c:66:10: fatal error: 'openssl/bio.h' file not found
- listview嵌套listview视图显示不全以及子listview不能滑动的处理
- js,获取URL参数
- 笨方法学python(本文为阅读时从此书摘录的笔记) 第五天
- Android版本名称、版本号、API level对应关系
- 浅谈MVC在Unity中的使用
- 调整数组顺序使奇数位于偶数前面
- Java学习第七天
- (())与( ) 还有有${ } 差在哪???
- 接口引用指向实现类的对象