【Android界面实现】解决ScrollView中嵌套Listview,Listview中嵌套Listview显示不完整和滑动冲突的问题

【Android】ListView、RecyclerView、ScrollView里嵌套ListView 相对优雅的解决方案:NestFullListView 一 背景概述:ScrollView里嵌套ListView,一直是Android开发者(反正至少是我们组)最讨厌的设计之一,完美打破ListView(RecyclerView)的复用机制,成功的将Native页面变成一个又臭又长的H5网页效果,但由于这种设计需求在我司项目实在太多见,无奈之下,我还是决定封装一下,毕竟,一个项目里同样的代码写第二遍的程序员都不是好的圣斗士。但是我真的是拒绝的 !拒绝的! 阅读详情


在一个滑动控件或者是布局里面,添加另外一个可以滑动的控件,通常会造成一些莫名其妙的问题。今天主要介绍在工作中遇到的,在ScrollView布局中嵌套Listview显示不正常,和在Listview中嵌套Listview的滑动冲突的问题。

1.ScrollView布局中嵌套Listview显示不正常的解决方案

目前来说,解决这个问题有好几种解决方案,这里只介绍其中两种比较简单易行的其中两种。

(1)自定义一个Listview,继承自Listview,代码如下:

[java]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. public class ListViewForScrollView extends ListView {  
  2.   
  3.     public ListViewForScrollView(Context context) {  
  4.         super(context);  
  5.     }  
  6.   
  7.     public ListViewForScrollView(Context context, AttributeSet attrs) {  
  8.         super(context, attrs);  
  9.     }  
  10.   
  11.     public ListViewForScrollView(Context context, AttributeSet attrs,  
  12.             int defStyle) {  
  13.         super(context, attrs, defStyle);  
  14.   
  15.     }  
  16.   
  17.     /** 
  18.      * 只需要重写这个方法即可 
  19.      */  
  20.     @Override  
  21.     protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {  
  22.         int expandSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2,  
  23.                 MeasureSpec.AT_MOST);  
  24.         super.onMeasure(widthMeasureSpec, expandSpec);  
  25.     }  
  26.   
  27. }  

在使用的时候,用这个控件代替Listview控件即可。

(2)重新计算Listview的高度

在一个滑动布局中添加一个滑动控件,滑动控件的高度因为不能计算,所以只能显示一个Item,若要解决这个问题,我们可以重新计算Listview的高度,调用下面的静态方法即可。

[java]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. /** 
  2.      * scrollview嵌套listview显示不全解决 
  3.      *  
  4.      * @param listView 
  5.      */  
  6.     public static void setListViewHeightBasedOnChildren(ListView listView) {  
  7.         ListAdapter listAdapter = listView.getAdapter();  
  8.         if (listAdapter == null) {  
  9.             return;  
  10.         }  
  11.   
  12.         int totalHeight = 0;  
  13.         for (int i = 0; i < listAdapter.getCount(); i++) {  
  14.             View listItem = listAdapter.getView(i, null, listView);  
  15.             listItem.measure(0, 0);  
  16.             totalHeight += listItem.getMeasuredHeight();  
  17.         }  
  18.   
  19.         ViewGroup.LayoutParams params = listView.getLayoutParams();  
  20.         params.height = totalHeight  
  21.                 + (listView.getDividerHeight() * (listAdapter.getCount() - 1));  
  22.         listView.setLayoutParams(params);  
  23.     }  

2.在Listview中嵌套Listview的滑动冲突问题

之前在项目中,出现了这种需求,就是在一个listview的footer中添加一个小的Listview,但是由于触摸冲突问题,小的listview不能滑动,若要解决这个问题,我们可以自定义一个控件继承自listview,然后重写onInterceptTouchEvent方法,对触摸事件进行分发。

onInterceptTouchEvent()是ViewGroup的一个方法,目的是在系统向该ViewGroup及其各个childView触发onTouchEvent()之前对相关事件进行一次拦截,我们可以在这个方法里面,对子控件或者是父控件获取触摸处理权限进行分发,从而完成各自的滑动任务。

效果图如下


代码如下

[java]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. /** 
  2.  *  
  3.  * @ClassName: com.example.listdemo.InnerListview 
  4.  * @Description: 可以放在Listview中的Listview 
  5.  * @author zhaokaiqiang 
  6.  * @date 2014-8-15 下午2:43:34 
  7.  *  
  8.  */  
  9. public class InnerListview extends ListView {  
  10.     public InnerListview(Context context) {  
  11.         super(context);  
  12.     }  
  13.   
  14.     public InnerListview(Context context, AttributeSet attrs) {  
  15.         super(context, attrs);  
  16.     }  
  17.   
  18.     public InnerListview(Context context, AttributeSet attrs, int defStyle) {  
  19.         super(context, attrs, defStyle);  
  20.   
  21.     }  
  22.   
  23.     @Override  
  24.     public boolean onInterceptTouchEvent(MotionEvent ev) {  
  25.         switch (ev.getAction()) {  
  26.         // 当手指触摸listview时,让父控件交出ontouch权限,不能滚动  
  27.         case MotionEvent.ACTION_DOWN:  
  28.             setParentScrollAble(false);  
  29.         case MotionEvent.ACTION_MOVE:  
  30.             break;  
  31.         case MotionEvent.ACTION_UP:  
  32.         case MotionEvent.ACTION_CANCEL:  
  33.             // 当手指松开时,让父控件重新获取onTouch权限  
  34.             setParentScrollAble(true);  
  35.             break;  
  36.   
  37.         }  
  38.         return super.onInterceptTouchEvent(ev);  
  39.   
  40.     }  
  41.   
  42.     // 设置父控件是否可以获取到触摸处理权限  
  43.     private void setParentScrollAble(boolean flag) {  
  44.         getParent().requestDisallowInterceptTouchEvent(!flag);  
  45.     }  
  46.   
  47. }  

这样,外面的listview和里面的小listview就都可以实现各自的滑动了。


    项目地址 https://github.com/ZhaoKaiQiang/InnerListview


转自:

在一个滑动控件或者是布局里面,添加另外一个可以滑动的控件,通常会造成一些莫名其妙的问题。今天主要介绍在工作中遇到的,在ScrollView布局中嵌套Listview显示不正常,和在Listview中嵌套Listview的滑动冲突的问题。

1.ScrollView布局中嵌套Listview显示不正常的解决方案

目前来说,解决这个问题有好几种解决方案,这里只介绍其中两种比较简单易行的其中两种。

(1)自定义一个Listview,继承自Listview,代码如下:

[java]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. public class ListViewForScrollView extends ListView {  
  2.   
  3.     public ListViewForScrollView(Context context) {  
  4.         super(context);  
  5.     }  
  6.   
  7.     public ListViewForScrollView(Context context, AttributeSet attrs) {  
  8.         super(context, attrs);  
  9.     }  
  10.   
  11.     public ListViewForScrollView(Context context, AttributeSet attrs,  
  12.             int defStyle) {  
  13.         super(context, attrs, defStyle);  
  14.   
  15.     }  
  16.   
  17.     /** 
  18.      * 只需要重写这个方法即可 
  19.      */  
  20.     @Override  
  21.     protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {  
  22.         int expandSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2,  
  23.                 MeasureSpec.AT_MOST);  
  24.         super.onMeasure(widthMeasureSpec, expandSpec);  
  25.     }  
  26.   
  27. }  

在使用的时候,用这个控件代替Listview控件即可。

(2)重新计算Listview的高度

在一个滑动布局中添加一个滑动控件,滑动控件的高度因为不能计算,所以只能显示一个Item,若要解决这个问题,我们可以重新计算Listview的高度,调用下面的静态方法即可。

[java]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. /** 
  2.      * scrollview嵌套listview显示不全解决 
  3.      *  
  4.      * @param listView 
  5.      */  
  6.     public static void setListViewHeightBasedOnChildren(ListView listView) {  
  7.         ListAdapter listAdapter = listView.getAdapter();  
  8.         if (listAdapter == null) {  
  9.             return;  
  10.         }  
  11.   
  12.         int totalHeight = 0;  
  13.         for (int i = 0; i < listAdapter.getCount(); i++) {  
  14.             View listItem = listAdapter.getView(i, null, listView);  
  15.             listItem.measure(0, 0);  
  16.             totalHeight += listItem.getMeasuredHeight();  
  17.         }  
  18.   
  19.         ViewGroup.LayoutParams params = listView.getLayoutParams();  
  20.         params.height = totalHeight  
  21.                 + (listView.getDividerHeight() * (listAdapter.getCount() - 1));  
  22.         listView.setLayoutParams(params);  
  23.     }  

2.在Listview中嵌套Listview的滑动冲突问题

之前在项目中,出现了这种需求,就是在一个listview的footer中添加一个小的Listview,但是由于触摸冲突问题,小的listview不能滑动,若要解决这个问题,我们可以自定义一个控件继承自listview,然后重写onInterceptTouchEvent方法,对触摸事件进行分发。

onInterceptTouchEvent()是ViewGroup的一个方法,目的是在系统向该ViewGroup及其各个childView触发onTouchEvent()之前对相关事件进行一次拦截,我们可以在这个方法里面,对子控件或者是父控件获取触摸处理权限进行分发,从而完成各自的滑动任务。

效果图如下


代码如下

[java]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. /** 
  2.  *  
  3.  * @ClassName: com.example.listdemo.InnerListview 
  4.  * @Description: 可以放在Listview中的Listview 
  5.  * @author zhaokaiqiang 
  6.  * @date 2014-8-15 下午2:43:34 
  7.  *  
  8.  */  
  9. public class InnerListview extends ListView {  
  10.     public InnerListview(Context context) {  
  11.         super(context);  
  12.     }  
  13.   
  14.     public InnerListview(Context context, AttributeSet attrs) {  
  15.         super(context, attrs);  
  16.     }  
  17.   
  18.     public InnerListview(Context context, AttributeSet attrs, int defStyle) {  
  19.         super(context, attrs, defStyle);  
  20.   
  21.     }  
  22.   
  23.     @Override  
  24.     public boolean onInterceptTouchEvent(MotionEvent ev) {  
  25.         switch (ev.getAction()) {  
  26.         // 当手指触摸listview时,让父控件交出ontouch权限,不能滚动  
  27.         case MotionEvent.ACTION_DOWN:  
  28.             setParentScrollAble(false);  
  29.         case MotionEvent.ACTION_MOVE:  
  30.             break;  
  31.         case MotionEvent.ACTION_UP:  
  32.         case MotionEvent.ACTION_CANCEL:  
  33.             // 当手指松开时,让父控件重新获取onTouch权限  
  34.             setParentScrollAble(true);  
  35.             break;  
  36.   
  37.         }  
  38.         return super.onInterceptTouchEvent(ev);  
  39.   
  40.     }  
  41.   
  42.     // 设置父控件是否可以获取到触摸处理权限  
  43.     private void setParentScrollAble(boolean flag) {  
  44.         getParent().requestDisallowInterceptTouchEvent(!flag);  
  45.     }  
  46.   
  47. }  

这样,外面的listview和里面的小listview就都可以实现各自的滑动了。


    项目地址 https://github.com/ZhaoKaiQiang/InnerListview



http://blog.youkuaiyun.com/zhaokaiqiang1992/article/details/38585547

在一个滑动控件或者是布局里面,添加另外一个可以滑动的控件,通常会造成一些莫名其妙的问题。今天主要介绍在工作中遇到的,在ScrollView布局中嵌套Listview显示不正常,和在Listview中嵌套Listview的滑动冲突的问题。

1.ScrollView布局中嵌套Listview显示不正常的解决方案

目前来说,解决这个问题有好几种解决方案,这里只介绍其中两种比较简单易行的其中两种。

(1)自定义一个Listview,继承自Listview,代码如下:

[java]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. public class ListViewForScrollView extends ListView {  
  2.   
  3.     public ListViewForScrollView(Context context) {  
  4.         super(context);  
  5.     }  
  6.   
  7.     public ListViewForScrollView(Context context, AttributeSet attrs) {  
  8.         super(context, attrs);  
  9.     }  
  10.   
  11.     public ListViewForScrollView(Context context, AttributeSet attrs,  
  12.             int defStyle) {  
  13.         super(context, attrs, defStyle);  
  14.   
  15.     }  
  16.   
  17.     /** 
  18.      * 只需要重写这个方法即可 
  19.      */  
  20.     @Override  
  21.     protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {  
  22.         int expandSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2,  
  23.                 MeasureSpec.AT_MOST);  
  24.         super.onMeasure(widthMeasureSpec, expandSpec);  
  25.     }  
  26.   
  27. }  

在使用的时候,用这个控件代替Listview控件即可。

(2)重新计算Listview的高度

在一个滑动布局中添加一个滑动控件,滑动控件的高度因为不能计算,所以只能显示一个Item,若要解决这个问题,我们可以重新计算Listview的高度,调用下面的静态方法即可。

[java]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. /** 
  2.      * scrollview嵌套listview显示不全解决 
  3.      *  
  4.      * @param listView 
  5.      */  
  6.     public static void setListViewHeightBasedOnChildren(ListView listView) {  
  7.         ListAdapter listAdapter = listView.getAdapter();  
  8.         if (listAdapter == null) {  
  9.             return;  
  10.         }  
  11.   
  12.         int totalHeight = 0;  
  13.         for (int i = 0; i < listAdapter.getCount(); i++) {  
  14.             View listItem = listAdapter.getView(i, null, listView);  
  15.             listItem.measure(0, 0);  
  16.             totalHeight += listItem.getMeasuredHeight();  
  17.         }  
  18.   
  19.         ViewGroup.LayoutParams params = listView.getLayoutParams();  
  20.         params.height = totalHeight  
  21.                 + (listView.getDividerHeight() * (listAdapter.getCount() - 1));  
  22.         listView.setLayoutParams(params);  
  23.     }  

2.在Listview中嵌套Listview的滑动冲突问题

之前在项目中,出现了这种需求,就是在一个listview的footer中添加一个小的Listview,但是由于触摸冲突问题,小的listview不能滑动,若要解决这个问题,我们可以自定义一个控件继承自listview,然后重写onInterceptTouchEvent方法,对触摸事件进行分发。

onInterceptTouchEvent()是ViewGroup的一个方法,目的是在系统向该ViewGroup及其各个childView触发onTouchEvent()之前对相关事件进行一次拦截,我们可以在这个方法里面,对子控件或者是父控件获取触摸处理权限进行分发,从而完成各自的滑动任务。

效果图如下


代码如下

[java]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. /** 
  2.  *  
  3.  * @ClassName: com.example.listdemo.InnerListview 
  4.  * @Description: 可以放在Listview中的Listview 
  5.  * @author zhaokaiqiang 
  6.  * @date 2014-8-15 下午2:43:34 
  7.  *  
  8.  */  
  9. public class InnerListview extends ListView {  
  10.     public InnerListview(Context context) {  
  11.         super(context);  
  12.     }  
  13.   
  14.     public InnerListview(Context context, AttributeSet attrs) {  
  15.         super(context, attrs);  
  16.     }  
  17.   
  18.     public InnerListview(Context context, AttributeSet attrs, int defStyle) {  
  19.         super(context, attrs, defStyle);  
  20.   
  21.     }  
  22.   
  23.     @Override  
  24.     public boolean onInterceptTouchEvent(MotionEvent ev) {  
  25.         switch (ev.getAction()) {  
  26.         // 当手指触摸listview时,让父控件交出ontouch权限,不能滚动  
  27.         case MotionEvent.ACTION_DOWN:  
  28.             setParentScrollAble(false);  
  29.         case MotionEvent.ACTION_MOVE:  
  30.             break;  
  31.         case MotionEvent.ACTION_UP:  
  32.         case MotionEvent.ACTION_CANCEL:  
  33.             // 当手指松开时,让父控件重新获取onTouch权限  
  34.             setParentScrollAble(true);  
  35.             break;  
  36.   
  37.         }  
  38.         return super.onInterceptTouchEvent(ev);  
  39.   
  40.     }  
  41.   
  42.     // 设置父控件是否可以获取到触摸处理权限  
  43.     private void setParentScrollAble(boolean flag) {  
  44.         getParent().requestDisallowInterceptTouchEvent(!flag);  
  45.     }  
  46.   
  47. }  

这样,外面的listview和里面的小listview就都可以实现各自的滑动了。


    项目地址 https://github.com/ZhaoKaiQiang/InnerListview



http://blog.youkuaiyun.com/zhaokaiqiang1992/article/details/38585547

在一个滑动控件或者是布局里面,添加另外一个可以滑动的控件,通常会造成一些莫名其妙的问题。今天主要介绍在工作中遇到的,在ScrollView布局中嵌套Listview显示不正常,和在Listview中嵌套Listview的滑动冲突的问题。

1.ScrollView布局中嵌套Listview显示不正常的解决方案

目前来说,解决这个问题有好几种解决方案,这里只介绍其中两种比较简单易行的其中两种。

(1)自定义一个Listview,继承自Listview,代码如下:

[java]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. public class ListViewForScrollView extends ListView {  
  2.   
  3.     public ListViewForScrollView(Context context) {  
  4.         super(context);  
  5.     }  
  6.   
  7.     public ListViewForScrollView(Context context, AttributeSet attrs) {  
  8.         super(context, attrs);  
  9.     }  
  10.   
  11.     public ListViewForScrollView(Context context, AttributeSet attrs,  
  12.             int defStyle) {  
  13.         super(context, attrs, defStyle);  
  14.   
  15.     }  
  16.   
  17.     /** 
  18.      * 只需要重写这个方法即可 
  19.      */  
  20.     @Override  
  21.     protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {  
  22.         int expandSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2,  
  23.                 MeasureSpec.AT_MOST);  
  24.         super.onMeasure(widthMeasureSpec, expandSpec);  
  25.     }  
  26.   
  27. }  

在使用的时候,用这个控件代替Listview控件即可。

(2)重新计算Listview的高度

在一个滑动布局中添加一个滑动控件,滑动控件的高度因为不能计算,所以只能显示一个Item,若要解决这个问题,我们可以重新计算Listview的高度,调用下面的静态方法即可。

[java]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. /** 
  2.      * scrollview嵌套listview显示不全解决 
  3.      *  
  4.      * @param listView 
  5.      */  
  6.     public static void setListViewHeightBasedOnChildren(ListView listView) {  
  7.         ListAdapter listAdapter = listView.getAdapter();  
  8.         if (listAdapter == null) {  
  9.             return;  
  10.         }  
  11.   
  12.         int totalHeight = 0;  
  13.         for (int i = 0; i < listAdapter.getCount(); i++) {  
  14.             View listItem = listAdapter.getView(i, null, listView);  
  15.             listItem.measure(0, 0);  
  16.             totalHeight += listItem.getMeasuredHeight();  
  17.         }  
  18.   
  19.         ViewGroup.LayoutParams params = listView.getLayoutParams();  
  20.         params.height = totalHeight  
  21.                 + (listView.getDividerHeight() * (listAdapter.getCount() - 1));  
  22.         listView.setLayoutParams(params);  
  23.     }  

2.在Listview中嵌套Listview的滑动冲突问题

之前在项目中,出现了这种需求,就是在一个listview的footer中添加一个小的Listview,但是由于触摸冲突问题,小的listview不能滑动,若要解决这个问题,我们可以自定义一个控件继承自listview,然后重写onInterceptTouchEvent方法,对触摸事件进行分发。

onInterceptTouchEvent()是ViewGroup的一个方法,目的是在系统向该ViewGroup及其各个childView触发onTouchEvent()之前对相关事件进行一次拦截,我们可以在这个方法里面,对子控件或者是父控件获取触摸处理权限进行分发,从而完成各自的滑动任务。

效果图如下


代码如下

[java]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. /** 
  2.  *  
  3.  * @ClassName: com.example.listdemo.InnerListview 
  4.  * @Description: 可以放在Listview中的Listview 
  5.  * @author zhaokaiqiang 
  6.  * @date 2014-8-15 下午2:43:34 
  7.  *  
  8.  */  
  9. public class InnerListview extends ListView {  
  10.     public InnerListview(Context context) {  
  11.         super(context);  
  12.     }  
  13.   
  14.     public InnerListview(Context context, AttributeSet attrs) {  
  15.         super(context, attrs);  
  16.     }  
  17.   
  18.     public InnerListview(Context context, AttributeSet attrs, int defStyle) {  
  19.         super(context, attrs, defStyle);  
  20.   
  21.     }  
  22.   
  23.     @Override  
  24.     public boolean onInterceptTouchEvent(MotionEvent ev) {  
  25.         switch (ev.getAction()) {  
  26.         // 当手指触摸listview时,让父控件交出ontouch权限,不能滚动  
  27.         case MotionEvent.ACTION_DOWN:  
  28.             setParentScrollAble(false);  
  29.         case MotionEvent.ACTION_MOVE:  
  30.             break;  
  31.         case MotionEvent.ACTION_UP:  
  32.         case MotionEvent.ACTION_CANCEL:  
  33.             // 当手指松开时,让父控件重新获取onTouch权限  
  34.             setParentScrollAble(true);  
  35.             break;  
  36.   
  37.         }  
  38.         return super.onInterceptTouchEvent(ev);  
  39.   
  40.     }  
  41.   
  42.     // 设置父控件是否可以获取到触摸处理权限  
  43.     private void setParentScrollAble(boolean flag) {  
  44.         getParent().requestDisallowInterceptTouchEvent(!flag);  
  45.     }  
  46.   
  47. }  

这样,外面的listview和里面的小listview就都可以实现各自的滑动了。


    项目地址 https://github.com/ZhaoKaiQiang/InnerListview


解决 ScrollView 嵌套 ListView 时,高度不正常和滑动冲突的问题 对于很多初中级Android工程师而言,想要提升技能,往往是自己摸索成长,不成体系的学习效果低效漫长且无助。整理的这些架构技术希望对Android开发的朋友们有所参考以及少走弯路,本文的重点是你有没有收获与成长,其余的都不重要,希望读者们能谨记这一点。下面是部分资料截图,诚意满满:特别适合有开发经验的Android程序员们学习。不论遇到什么困难,都不应该成为我们放弃的理由!如果你看到了这里,觉得文章写得不错就给个赞呗?《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》 阅读详情

相关推荐

ScrollView和Fragment中的ListView、WebView滑动冲突问题的解决

日常开发中很少会碰到ScrollView中嵌套listview或webview的情况,而且谷歌官方也不推荐这么做,但是也不是一定不会有这样的需求,毕竟定需求的不是我们程序员,而是产品经理。比如像下面这种需求:        可以看到,整个页面有一个共同的头部,下面有两个tab,左边tab下是个可以滚动的webview,右边是个listview。要求listview和webvi

大道至簡的博客 2763

android ScrollView嵌套ListView

在工作中,曾多次碰到ScrollView嵌套ListView的问题,网上的解决方法有很多种,但是杂而不全。我试过很多种方法,它们各有利弊。 在这里我将会从使用ScrollView嵌套ListView结构的原因、这个结构碰到的问题、几种解决方案和优缺点比较,这4个方面来为大家阐述、分析、总结。 实际上不光是ListView,其他继承自AbsListView的类也适用,包括Expandab

u010152805的专栏 2131

横向滑动的listview效果的实现方法,scrollview嵌套水平滑动的listview卡顿的解决方法

很多时候,界面需要实现横向滑动的listview效果。网络上有一种方法,自定义了HorizontalListView,用法同正常的listview,可实现水平滑动效果。 但是如果一个界面 为垂直滑动的scrollview嵌套水平滑动的listview的时候,滑动水平listview的时候,会很卡。我最近就遇到了这样的问题,一直把思路放在监听水平和垂直滑动手势,想实现滑动角度小于45的时候 垂直的

lunizhu的专栏 3766

Scrollview嵌套ListView

我们在做android开发的时候,经常会遇到Scrollview嵌套ListView的问题,其中有几点问题,就是scrollview和listview都会滑动。 第一个问题,解决listview的滑动:设置listview不滑动 重写listview,重写listview中的onmeasure方法 /** * 设置不滚动 */ public void onMeasure(int w

u013377714的专栏 1778

彻底解决ScrollView嵌套ListView滑动冲突的事件分发实战

在自定义 View 中,合理实现可以提升交互体验。例如实现一个可拖动的 View:@Overridebreak;功能说明:时记录初始坐标。时计算偏移量,并更新 View 的位置。实现 View 的平移动画效果。在Android中,ScrollView本身并不具备对嵌套内容滑动方向的智能判断能力,因此当其内部嵌套一个同样支持垂直滑动的ListView时,两者在滑动行为上容易发生冲突。通过继承ScrollView并重写其。

weixin_35879493的博客 1178

彻底解决ScrollView嵌套ListView滑动冲突的6种实战方案

既然默认行为不可靠,那就只能我们自己动手了!通过重写,我们可以根据手势方向、速度等条件,决定到底由谁来滚动。经过这么长的旅程,我想你现在心里已经有答案了。📌记住这几个原则:能不用嵌套,就不用嵌套—— 优先考虑布局扁平化;要用嵌套,就用标准协议—— 优先选择;慎用手动拦截—— 除非万不得已,否则不要自己造轮子;长远来看,拥抱 Compose—— 声明式 UI 才是未来的方向。

weixin_33816734的博客 1189

Android中ScrollView嵌套ListView

参考网址:https://blog.youkuaiyun.com/wanghao200906/article/details/51084975 1.ScrollView嵌套ListView(listView所有条目展示出来,并且不能滑动了) package com.view; import android.content.Context; import android.util.AttributeSet; import android.view.MotionEvent; import android.widge

aidou1314的博客 2432

Android开发中ScrollView嵌套ListView的解决方案汇总

定义了子控件如何向父容器请求滚动的能力。:定义了父容器如何响应子控件的滚动请求。当子控件(如)开始滚动时,它会通过方法向父容器(如)申请滚动权限。父容器在收到申请后,可以决定是否参与滚动事件的处理,并通过和方法与子控件进行协调。<TextViewandroid:text="欢迎来到我的页面"<ImageView<TextViewandroid:text="数据项内容"@Override@Override@Override@Override。

weixin_29050829的博客 1241

ListView和ScrollView嵌套解决滑动冲突问题

首先,说明一下,我这里的ListView和ScrollView都是上下滑动的,如果是左右滑动,虽然差距不大,但就不能直接生搬硬套了。 1.解决ListView和ScrollView嵌套滑动冲突问题 当ListView放在ScrollView的布局中间,直接实现ListView的setOnTouchListener就可以了 listView.setOnTouchListener(new Vi...

ALee_130158的博客 2450

FFmpeg硬件加速实战:VAAPI驱动配置全攻略(含NVIDIA/Intel避坑指南)

本文详细解析了在Linux环境下配置FFmpeg使用VAAPI接口实现硬件加速的完整流程。针对NVIDIA、Intel等主流显卡,提供了从驱动安装、环境变量设置到多显卡切换的实战指南,并重点解决了闭源驱动冲突、国产系统适配等常见问题,帮助用户有效提升视频处理性能。

weixin_29306011的博客 453

Android实践之ScrollView中滑动冲突处理

在Android开发中,如果是一些简单的布局,都很容易搞定,但是一旦涉及到复杂的页面,特别是为了兼容小屏手机而使用了ScrollView以后,就会出现很多点击事件的冲突,最经典的就是ScrollView中嵌套了ListView。我想大部分刚开始接触Android的同学们都踩到过这个坑,这一篇文章就从最近做的一个项目讲起,然后在过程中提供一些解决冲突的思路。

王三的专栏 2万+

从零开始学习信号完整性(SIPI)--2

上一节我们已经谈过,信号完整性研究的是如何使驱动器输出的信号传输到接收器件并被正确的接收。 信号完整性的三要素包含了:信号、驱动接收芯片、传输通道。 这其中信号是主体,我们要做的主要工作就是设计好信号的传输路径为信号的正确传输扫清障碍。要做信号完整性分析与设计首先要了解信号的特性,以及信号质量的判别标准。 对一个信号进行描述通常需要如下几个指标: 信号特性的描述 摆幅:信号从低电平到高电平之间的电压差,对于单端信号通常由信号的供电电压决......

qq_29476769的博客 2万+

Android ScrollView嵌套ListView 滑动冲突问题的解决方法

1、自定义ScrollView类,处理事件分发 /** * 解决scrollview嵌套listview造成滑动冲突的问题 * Created by xl on 2019/1/25. */ public class ListScrollView extends ScrollView { private ListView listView; public ListScr...

沧海龙腾LV的博客 1505

用KalmanNet搞定非线性状态估计:当卡尔曼滤波遇上神经网络

本文深入探讨了KalmanNet如何将神经网络与卡尔曼滤波结合,以解决非线性状态估计中的模型失配和噪声不确定性问题。通过保留经典滤波框架并用RNN学习卡尔曼增益,该方法在无人机导航、机器人定位等场景中实现了模型驱动与数据驱动的优势互补,提升了估计的鲁棒性和灵活性。

mango的博客 309

【Claude】权限被拒绝 (Permission Denied) 全场景排查 — 已解决

权限配置是 Claude Code 安全使用的核心机制。通过合理的 allow/deny 规则、正确的通配符使用、子代理独立配置、定期安全审计,可以在保证安全性的同时不影响开发效率。deny 优先:deny 规则优先级高于 allow,先保护敏感资源通配符精确单层匹配,**递归匹配,Bash(cmd*)允许带参数最小权限:只允许必要的操作,避免Bash(*)等危险规则CI 用 skip:Headless 模式用避免挂起子代理独立:每个子代理单独配置权限,不自动继承保护密钥:deny.env。

一键难忘的博客 3935

完美解决ScrollView嵌套ListView滑动冲突(有图有真相)

(转载请保留原文地址  csdn yang http://blog.youkuaiyun.com/lys701/article/details/8755373) 最近在android开发中,需要在ScrollView里面嵌套ListView,嵌套之后发现滑动冲突。问google问度娘,得出的很多答案都是设置listView的高度,让所有的item都显示出来,我觉得这是一种很不好的解决办法。在试过了很多次之后

lys701的专栏 7799

k8s中pod使用详解

k8s中Pod使用

congge 1万+

完美解决Android中的ScrollView嵌套ListView滑动冲突问题

之前写了怎么解决ScrollView嵌套ScrollView滑动冲突的问题,因为这种不同嵌套所造成的滑动冲突本质上是一样的问题和原因,解决思路也都相同,唯一的具体差别就差在判断条件上,故此贴之上代码,想看问题原因和解决思路的可以查看这篇文章——解决Android中ScrollView嵌套ScrollView滑动冲突问题 public class MyScrollListView extends...

Ever69的博客 1173

Coffin-Manson模型的详细讲解

Coffin-Manson模型是一个简单而强大的工具,用于预测低循环疲劳寿命,尤其在半导体功率循环中评估热机械可靠性。其核心是通过应变(或温度变化)与循环次数的对数关系,实现加速测试和寿命外推。尽管有局限性,通过改进版本(如加入激活能),它在电子封装、焊点疲劳和器件设计中仍广泛应用。实际使用时,建议结合实验数据拟合参数,并验证模型预测。如果需要特定材料的参数值、代码实现或进一步计算示例,请提供更多细节!

专注于前沿技术的探索与实践,热衷于从代码逻辑、架构设计到行业应用等多维度深挖技术本质。期待在技术之路上与你共同成长~ 2144

【OTFS与信号处理:论文阅读4】OTFS时延多普勒域嵌入导频辅助信道估计(已更新)

【OTFS与信号处理:论文阅读】Embedded Pilot-Aided Channel Estimation for OTFS in Delay–Doppler Channel(快来看看OTFS嵌入式导频设计的经典之作!!!)

Cuby的博客 5335
上一篇: aSmack4.0之旅(二)退出篇(换账号无效)
下一篇: 【Android界面实现】listview控件的一些重要属性整理
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值