1. 概述
这篇文章主要记录下自己在项目中的一个需求,如下图所示:
这个是多家店铺的每个店铺的商品的购物车界面,目前只是还没有对应店铺名称,需要下拉刷新和上拉加载更多,针对于这样的界面,自己采用的是ListView嵌套ListView的,外层的ListView有下拉刷新和上拉加载更多,内层是一个重写 onMeasure()的自定义ListView,但是遇到了2个问题:
问题1:嵌套后,外层ListView的下拉刷新失效;
问题2:内层的ListView的adapter中的 item中的button、TextView、checkbox等控件的点击事件失效;
问题3:外层的listview的 setOnItemClickListener失效;
2. 解决方案如下
1>:解决问题1:重写内层自定义的ListView的 onInterceptTouchEvent返回false,让内层的ListView不要拦截父控件ListView的下拉刷新事件;
2>:解决问题2:重写onTouchEvent返回false,表示没有消费事件,事件会以冒泡方式传递到 最上层的 view 或者 activity,如果最上边的 view 或者 activity没有处理,还是 返回 false,该事件将消失。接下来的所有事件都会被 最上层的view 的 onTouchEvent捕获,具体可参照我之前文章;
/**
* Email: 2185134304@qq.com
* Created by Novate 2018/8/18 9:40
* Version 1.0
* Params:
* Description: 内存ListView
*/
public class ChildLiistView extends ListView {
public ChildLiistView(Context context) {
super(context);
// TODO Auto-generated constructor stub
}
public ChildLiistView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
// TODO Auto-generated constructor stub
}
public ChildLiistView(Context context, AttributeSet attrs) {
super(context, attrs);
// TODO Auto-generated constructor stub
}
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
int expandSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2,
MeasureSpec.AT_MOST);
super.onMeasure(widthMeasureSpec, expandSpec);
}
/*********************** 不要拦截父控件ListView的下拉刷新事件 start *************************/
/*@Override
public boolean dispatchTouchEvent(MotionEvent ev) {
return false;
}
*/
/**
* 为了让ChildListView的adapter中的控件可以触发点击事件
*/
@Override
public boolean onTouchEvent(MotionEvent ev) {
return false;
}
/**
* 为了让外层的AutoListView可以下拉刷新
*/
@Override
public boolean onInterceptTouchEvent(MotionEvent ev) {
return false;
}
/*********************** 不要拦截父控件ListView的下拉刷新事件 end *************************/
}
3>:解决问题3:
a:在子ListView的 adapter的 item布局文件的 根布局的 LinearLayout中添加属性:
android:descendantFocusability="blocksDescendants"
b:然后在 父 ListView的布局文件中添加属性:
android:focusable="false"
即可。
可以参照这篇文章:
https://blog.csdn.net/XiaoRouniao/article/details/73369423