ScrollView与ListView的事件冲突

简介: 布局文件 当ListView嵌套在ScrollView中时,会发生冲突,导致ListView控件的拉动效果消失‘ 解决办法: 重写ListView的onTouchEvent(),并在返回前调用getParent().requestDisallowInterceptTouchEvent(true)  表示。

布局文件

当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

效果图:

相关文章
|
9月前
|
API Android开发 容器
36. 【Android教程】侧滑菜单:DrawerLayout
36. 【Android教程】侧滑菜单:DrawerLayout
170 1
|
Android开发
ScrollView 与 ListView 以及 GridView 滑动冲突完美解决
ScrollView 与 ListView 以及 GridView 滑动冲突完美解决
|
XML 数据格式
DrawerLayout侧滑菜单、Toolbar和沉浸式状态栏的使用
DrawerLayout侧滑菜单、Toolbar和沉浸式状态栏的使用
|
Web App开发 API 容器
CoordinatorLayout+AppBarLayout实现上滑隐藏ToolBar-Android M新控件
CoordinatorLayout+AppBarLayout实现上滑隐藏ToolBar-Android M新控件
325 0
ScrollView和HorizontalScrollView无法设置点击事件的源码解析
最近的开发过程中,发现存在ScrollView和HorizontalScrollView无法设置点击事件的现象。 我们知道,通常在设置点击事件时,位于View树上方的子View的OnClickListener,会优先于父View的OnClickListener执行。 开发过程中我们会经常使用类似的方式来给布局设置点击事件,比如给ListView的Item背景设置OnClickListener,用于点击item空白区域的跳转操作;然后再给item内部的子元素分别设置OnClickListener用于各自不同的点击操作。
SwipeRefreshLayout 嵌套ScrollView 滑动冲突
SwipeRefreshLayout 嵌套ScrollView 滑动冲突
288 0
|
Android开发
NestedScrollView + ExpandableListView 显示不全问题和滑动冲突问题 。
NestedScrollView + ExpandableListView 显示不全问题和滑动冲突问题 。
|
Android开发 容器 Java
Android取消RecyclerView、ListView、ScrollView、HorizontalScrollView滑动到边缘闪现灰白色水波纹动画
Android取消RecyclerView、ListView、ScrollView、HorizontalScrollView滑动到边缘闪现灰白色水波纹动画 标准的Android RecyclerView、ListView、ScrollView、HorizontalScrollView滑动到边缘,会闪现灰白色水波纹动画,以这样大的动画效果提示用户已经滑动到边缘,没法再滑动了。
3088 0
|
监控 前端开发 iOS开发