ScrollView与ListView的事件冲突

布局文件

当ListView嵌套在ScrollView中时,会发生冲突,导致ListView控件的拉动效果消失‘

解决办法:

重写ListView的onTouchEvent(),并在返回前调用getParent().requestDisallowInterceptTouchEvent(true)  表示。不允许父层拦截或干扰本控件

Demo

 1 package com.xqx.fight;
 2
 3 import android.app.Activity;
 4 import android.os.Bundle;
 5 import android.view.Menu;
 6 import android.view.MotionEvent;
 7 import android.view.View;
 8 import android.view.View.OnTouchListener;
 9 import android.widget.ArrayAdapter;
10 import android.widget.ListView;
11
12 public class MainActivity extends Activity {
13
14     private ListView listView;
15     private ArrayAdapter<String > adapter;
16
17     @Override
18     protected void onCreate(Bundle savedInstanceState) {
19         super.onCreate(savedInstanceState);
20         setContentView(R.layout.activity_main);
21
22         listView = (ListView) findViewById(R.id.listView);
23         adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1);
24         for(int i=0;i<20;i++)
25         {
26             adapter.add("列表项:"+i);
27         }
28         listView.setAdapter(adapter);
29
30         listView.setOnTouchListener(new OnTouchListener() {
31
32             @Override
33             public boolean onTouch(View v, MotionEvent event) {
34                 //getParent().requestDisallowInterceptTouchEvent(true)  不允许父层拦截或干扰本控件
35                 listView.getParent().requestDisallowInterceptTouchEvent(true);
36                 return false;
37             }
38         });
39     }
40
41 }

MainActivity.class

布局文件

 1 <ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
 2     xmlns:tools="http://schemas.android.com/tools"
 3     android:layout_width="match_parent"
 4     android:layout_height="match_parent"
 5
 6    >
 7
 8
 9     <LinearLayout
10         android:layout_width="match_parent"
11         android:layout_height="match_parent"
12         android:orientation="vertical"
13         >
14
15         <TextView android:layout_width="match_parent"
16             android:background="#5000"
17             android:layout_height="100dp"
18             android:text="上面部分"/>
19
20     <ListView
21         android:layout_width="match_parent"
22         android:layout_height="250dp"
23         android:id="@+id/listView"
24         >
25     </ListView>
26
27         <TextView android:layout_width="match_parent"
28             android:layout_height="100dp"
29             android:background="#5000"
30             android:text="底部部分"/>
31
32
33     </LinearLayout>
34
35
36
37 </ScrollView>

activity_main.xml

效果图:

时间: 2024-12-29 06:02:11

ScrollView与ListView的事件冲突的相关文章

android开发步步为营之65:解决ScrollView和ListView触摸事件onInterceptTouchEvent相互冲突问题

最近项目里面有个需求,一个页面放了一个ScrollView,整个页面可以向上滚动,然后ScrollView里面又嵌套了一个ListView,ListView里面的数据也是可以上下滑动的,理论上ListView被包在ScrollView里面,TouchEvent肯定是被ScrollView拦截了,那我们可以采取什么思路呢,我看网上很多做法说是将整个ListView的高度计算出来,感觉这样很不优雅,如果ListView数据超多,那么页面不是超长吗?其中一个思路就是当我们滑动ListView区域的时候

Android ListView焦点事件冲突问题与解决

Android ListView对于单纯列表展示是很好用的,但是一旦牵扯到对listView进行操作就会遇到各种各样的问题.比如保存Checkbox状态与item复用的冲突.遇到可获取焦点的控件比如说button.edxttext等与listView本身的点击事件冲突等.对于后者,这里不研究原因,只提供解决方案. 如果listView之中只有button这样会抢夺焦点的控件,最好的建议是直接把button换成Textview,直接规避焦点问题. 如果有些产品经理要求在listview的item中

ScrollView嵌套ListView的滑动冲突问题,是看大神的方法的,作为学习以后用的到

在工作中,曾多次碰到ScrollView嵌套ListView的问题,网上的解决方法有很多种,但是杂而不全.我试过很多种方法,它们各有利弊. 在这里我将会从使用ScrollView嵌套ListView结构的原因.这个结构碰到的问题.几种解决方案和优缺点比较,这4个方面来为大家阐述.分析.总结. 实际上不光是ListView,其他继承自AbsListView的类也适用,包括ExpandableListView.GridView等等,为了方便说明,以下均用ListView来代表. 大神就是牛,给出了好

解决ScrollView嵌套viewpager滑动事件冲突问题

重写ScrollView 第一种方案能解决viewpager的滑动问题,但是scrollView有时会滑不动 public class VerticalScrollView extends ScrollView { private GestureDetector mGestureDetector; public VerticalScrollView(Context context, AttributeSet attrs){ super(context, attrs); mGestureDetec

仿百度壁纸客户端(三)——首页单向,双向事件冲突处理,壁纸列表的实现

仿百度壁纸客户端(三)--首页单向,双向事件冲突处理,壁纸列表的实现 上回把广告轮播图给实现了,今天就来把主页的大部分功能给实现了 一.ScrollView和ViewPager滑动事件冲突的解决办法 我们仔细想想,我们的主页架构,首先他是上下滑动的,所以这样要一个ScrollView,然后就是轮播图和其他内容了,这样的话,上下滑动有事件,轮播图也有事件,我们先看下xml的实现原理 home_fragment_xml <?xml version="1.0" encoding=&qu

android 开发-ListView与ScrollView事件冲突处理(事件分发机制处理)

ListView和ScrollView都存在滚动的效果,所以一般不建议listView和scrollView进行嵌套使用,但有些需求则需要用到两者嵌套.在android的学习中学了一种事件分发处理机制. 如果listView显示在UI上部,而如imageView等显示在UI下部. 首先为listView注册一个滑动监听事件 通过为listView设置固定高度,并注册滑动监听事件.在划动监听事件中,记录用户是否滑动至listView数据底部. 通过activity的dispatchTouchEve

解决ScrollView与ListView事件冲突

1,在最近做项目的时候使用ScrollView嵌套ListView的时候发现ListView的滑动效果失效,简单的网上搜索了一下,也就有了下面的解决方法,在ListView中设置事件的监听listview.OnTouchListener(),让父控件不影响子控件的事件 1 2 3 4 5 6 7 8 9 listView.setOnTouchListener(new OnTouchListener() {                             @Override        

android 有弹性的ScrollView 简单实现,与处理ScrollView和ListView,GridView之间的冲突

处理ScrollView和ListView,GridView之间的冲突, 最好的办法就是继承这两个类,重写他们的onMeasure方法即可: ListView: import android.widget.ListView; /** * ScrollView中嵌入ListView,让ListView全显示出来 * @author John * */ public class MyListView extends ListView{ public MyListView(android.conten

重写ListView解决ListView内部ViewPaper滑动事件冲突问题

很简单 重写ListView 其他类似问题解决ScrollView嵌套ViewPager出现的滑动冲突问题 http://blog.csdn.net/zhangyiacm/article/details/37903071 package com.zy.myview; import android.content.Context; import android.util.AttributeSet; import android.view.GestureDetector; import androi