本人菜鸟一名,最近工作了,开始学习Android。

最近在做项目的时候,UX给了个design,大概就是下拉刷新的ListView中嵌套了ScrollView,而且还要在ScrollView中添加动画。

在ListView中嵌套使用ScrollView这种方式是不推荐使用的,但是为了满足UX的设计(UX、QA至上,不然BUG绝逼要来)。

为了解决这个问题,菜鸡开始网上查阅资料,但是搜出来的大多是ListView的Item显示不全等解决方案,并没有解决Scroll事件冲突。通过请教同事,最终使用view的requestDisallow方法成功解决。下面是Demo测试的代码

activity_main.xml

 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.example.test.MainActivity" > <ListView
android:id="@+id/list_view"
android:layout_width="match_parent"
android:layout_height="match_parent" >
</ListView> </RelativeLayout>

list_view_item.xml

 <?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent" > <ScrollView
android:id="@+id/scorll_view"
android:layout_width="match_parent"
android:layout_height="200dp" > <LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical" > <ImageView
android:layout_width="match_parent"
android:layout_height="100dp"
android:contentDescription="@null"
android:src="@drawable/ic_launcher" /> <ImageView
android:layout_width="match_parent"
android:layout_height="100dp"
android:contentDescription="@null"
android:src="@drawable/ic_launcher" /> <ImageView
android:layout_width="match_parent"
android:layout_height="100dp"
android:contentDescription="@null"
android:src="@drawable/ic_launcher" /> <ImageView
android:layout_width="match_parent"
android:layout_height="100dp"
android:contentDescription="@null"
android:src="@drawable/ic_launcher" />
</LinearLayout>
</ScrollView> </RelativeLayout>

ScrollViewItemAdatper.java

 package com.example.test;

 import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter; public class ScrollViewItemAdatper extends BaseAdapter { private Context mContext; public ScrollViewItemAdatper(Context context) {
mContext = context;
} @Override
public int getCount() {
return 2;
} @Override
public Object getItem(int arg0) {
return arg0;
} @Override
public long getItemId(int arg0) {
return arg0;
} @Override
public View getView(int arg0, View arg1, ViewGroup arg2) {
if (arg1 == null) {
arg1 = LayoutInflater.from(mContext).inflate(R.layout.list_view_item, null);
}
return arg1;
} }

MainActivity.java

package com.example.test;

import android.app.Activity;
import android.os.Bundle;
import android.view.MotionEvent;
import android.widget.ListView; public class MainActivity extends Activity { private ListView mListView;
private ScrollViewItemAdatper scrollViewItemAdatper; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mListView = (ListView) findViewById(R.id.list_view);
scrollViewItemAdatper = new ScrollViewItemAdatper(getBaseContext());
mListView.setAdapter(scrollViewItemAdatper);
} @Override
public boolean dispatchTouchEvent(MotionEvent ev) {
mListView.requestDisallowInterceptTouchEvent(true);
return super.dispatchTouchEvent(ev);
}
}

其中最主要的部分在于

 @Override
public boolean dispatchTouchEvent(MotionEvent ev) {
mListView.requestDisallowInterceptTouchEvent(true);
return super.dispatchTouchEvent(ev);
}
requestDisallowInterceptTouchEvent这个方法是当前的View获得了touch事件是否截取进行处理,从而消耗掉。如果为true的话,这个View就不进行touch事件的处理,转而抛给其子View进行处理。当然,这个只是用来测试的,所以并没有加上许多判断条件。如果在向上或者向下等某个具体手势是,可以使用
dispatchTouchEvent进行判断即可。

Android ScrollView 嵌套 ListView、 ListView 嵌套ScrollView Scroll事件冲突解决办法的更多相关文章

  1. Android中View类OnClickListener和DialogInterface类OnClickListener冲突解决办法

    Android中View类OnClickListener和DialogInterface类OnClickListener冲突解决办法 如下面所示,同时导入这两个,会提示其中一个与另一个产生冲突. 1i ...

  2. Android Listview中Button按钮点击事件冲突解决办法

    今天做项目时,ListView中含有了Button组件,心里一早就知道肯定会有冲突,因为以前就遇到过,并解决过,可惜当时没有记录下来. 今天在做的时候,继续被这个问题郁闷了一把,后来解决后,赶紧来记录 ...

  3. 一个页面tab标签切换,都有scroll事件的解决办法

    当前页有多个tab,如果都有scroll事件, 先解绑$(window).off('scroll') 再执行scroll就不可以了,多个标签就不会互相干扰: 给你们个例子: //标签切换    $(' ...

  4. 5个Android开发中比较常见的内存泄漏问题及解决办法

    android中一个对象已经不需要了,但是其他对象还持有他的引用,导致他不能回收,导致这个对象暂存在内存中,这样内存泄漏就出现了.   内存泄漏出现多了,会是应用占用过多的没存,当占用的内存超过了系统 ...

  5. 在ScrollView添加一个ListView造成的滚动问题的简单解决办法()

    正常来说,在ScrollView添加一个ListView后在真机上只会显示ListView的一行多一点,我也不理解为什么会这样,后来我把ListView的layout_height改成400dip,而 ...

  6. android 自定义adapter和线程结合 + ListView中按钮滑动后状态丢失解决办法

    adapter+线程 1.很多时候自定义adapter的数据都是来源于服务器的,所以在获取服务器的时候就需要异步获取,这里就需要开线程了(线程池)去获取服务器的数据了.但这样有的时候adapter的中 ...

  7. 小程序:scroll-view组件滑动多次触发scroll事件的bug解决

    在项目开发过程中,组件是微信小程序提供给我们的一个分页器,一般滑动到底部时会触发scroll事件,scroll事件中往往包含对后端数据的请求:若是还未滑动到底部时频繁触发事件,则会频繁发请求,达不到想 ...

  8. ScrollView cannot scroll in Slidinguppanellayout 解决办法

    xml源码如下 <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:an ...

  9. ListView子项点击无反应的解决办法

    在使用ListView控件的过程中,当子项包括Button或者CheckBoX等控件时,直接点击子项无反应,分析发现原来是Button,CheckBoX等控件会优先获取焦点,那么子项点击的焦点就被上述 ...

随机推荐

  1. VS2013安装过程截图

    ================================================================ VS 2013 中新增了很多提高开发人员工作效率的新功能,比如自动补全 ...

  2. MVC中的HtmlHelper

    authour: chenboyi updatetime: 2015-04-27 21:57:17 friendly link:   目录: 1,思维导图 2,CodeSimple 1.思维导图:

  3. Oracle开启归档

    #查看数据库是否为归档模式select name ,log_mode from v$database; #改变归档模式到非归档模式shutdown normal/immediate; #关闭数据库st ...

  4. Hibernate的批量处理

    Hibernate完全以面向对象的方式操作数据库,当程序员以面向对象的方式操作持久化对象时,将自动转换为对数据的操作.例如我们Session的delete()方法,来删除持久化对象,Hibernate ...

  5. 如何做好PPT?

  6. 不通用版(从SVN取版本,通过MAVEN生成JAVA包,通过SALTSTACK传送到远程服务器并自动重启TOMCAT服务)PYTHON代码

    从昨晚写到今天啊, 第一版测试成功了. PHP和JAVA的更新相对来说,PHP的自动化更新是简单多啦~~ 当然,这只是运维工作当中的一环~~ #!/usr/bin/env python # -*- c ...

  7. c/c++关于内存分配的知识(非常详细的比较,且VirtualAlloc分配内直接在进程的地址空间中保留一快内存)

    一个由c/C++编译的程序占用的内存分为以下几个部分 1.栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等.其操作方式类似于数据结构中的栈. 2.堆区(heap) — 一 ...

  8. MIUI是小米的核心竞争力

    MIUI与众多顶尖的互联网公司合作开发系统功能,题主说的很不完全,当然估计除了MIUI开发组也没人能说的很完整,我试着总结了一下,欢迎补充: 1.云服务:金山云(小米公司持有金山云公司9.87%的股份 ...

  9. UVA11388 GCD LCM(数论)

    题目链接. 题意: 给定两个数,一个G,一个L,找出两个数a,b(a<=b),使得这两个数的最大公约数为G,最小公倍数为L,且(a最小). 分析: 当a,b存在时,a一定为G. 自己证了一下,数 ...

  10. Subway POJ 2502

    题目链接: http://poj.org/problem?id=2502 题目大意: 你刚从一个安静的小镇搬到一个吵闹的大城市,所以你不能再骑自行车去上学了,只能乘坐地铁或者步行去上学.因为你不想迟到 ...