Android ScrollView 嵌套 ListView、 ListView 嵌套ScrollView Scroll事件冲突解决办法
本人菜鸟一名,最近工作了,开始学习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事件冲突解决办法的更多相关文章
- Android中View类OnClickListener和DialogInterface类OnClickListener冲突解决办法
Android中View类OnClickListener和DialogInterface类OnClickListener冲突解决办法 如下面所示,同时导入这两个,会提示其中一个与另一个产生冲突. 1i ...
- Android Listview中Button按钮点击事件冲突解决办法
今天做项目时,ListView中含有了Button组件,心里一早就知道肯定会有冲突,因为以前就遇到过,并解决过,可惜当时没有记录下来. 今天在做的时候,继续被这个问题郁闷了一把,后来解决后,赶紧来记录 ...
- 一个页面tab标签切换,都有scroll事件的解决办法
当前页有多个tab,如果都有scroll事件, 先解绑$(window).off('scroll') 再执行scroll就不可以了,多个标签就不会互相干扰: 给你们个例子: //标签切换 $(' ...
- 5个Android开发中比较常见的内存泄漏问题及解决办法
android中一个对象已经不需要了,但是其他对象还持有他的引用,导致他不能回收,导致这个对象暂存在内存中,这样内存泄漏就出现了. 内存泄漏出现多了,会是应用占用过多的没存,当占用的内存超过了系统 ...
- 在ScrollView添加一个ListView造成的滚动问题的简单解决办法()
正常来说,在ScrollView添加一个ListView后在真机上只会显示ListView的一行多一点,我也不理解为什么会这样,后来我把ListView的layout_height改成400dip,而 ...
- android 自定义adapter和线程结合 + ListView中按钮滑动后状态丢失解决办法
adapter+线程 1.很多时候自定义adapter的数据都是来源于服务器的,所以在获取服务器的时候就需要异步获取,这里就需要开线程了(线程池)去获取服务器的数据了.但这样有的时候adapter的中 ...
- 小程序:scroll-view组件滑动多次触发scroll事件的bug解决
在项目开发过程中,组件是微信小程序提供给我们的一个分页器,一般滑动到底部时会触发scroll事件,scroll事件中往往包含对后端数据的请求:若是还未滑动到底部时频繁触发事件,则会频繁发请求,达不到想 ...
- ScrollView cannot scroll in Slidinguppanellayout 解决办法
xml源码如下 <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:an ...
- ListView子项点击无反应的解决办法
在使用ListView控件的过程中,当子项包括Button或者CheckBoX等控件时,直接点击子项无反应,分析发现原来是Button,CheckBoX等控件会优先获取焦点,那么子项点击的焦点就被上述 ...
随机推荐
- jQuery判断浏览器
在jQuery1.9版本之前,jQuery 提供了 browser 标记 <script type="text/javascript" src="http://aj ...
- Centos 6安装python3.5
安装python3.5 安装步骤如下 :1 准备编译环境(环境如果不对的话,可能遇到各种问题,比如wget无法下载https链接的文件) yum groupinstall 'Development T ...
- linux c数据库备份第五版
linux下c实现的数据库备份程序终于迎来第五版啦,这样改程序就暂告一段落啦,有点小激动呢...接下来的一周(可能两周)时间里,我会用一个小型的网络游戏(比拼99乘法)作为我学习linux c的毕业之 ...
- bzoj2071: [POI2004]JAS
Description 在Byteotia有一个洞穴. 它包含n 个洞室和一些隧道连接他们. 每个洞室之间只有一条唯一的路径连接他们. Hansel 在其中一个洞室藏了宝藏, 但是它不会说出它在哪. ...
- Tr A
Problem Description A为一个方阵,则Tr A表示A的迹(就是主对角线上各项的和),现要求Tr(A^k)%9973. Input 数据的第一行是一个T,表示有T组数据. 每组数据的第 ...
- [Android] createTrack_l
在分析AudioTrack的时候,第一步会new AudioTrack,并调用他的set方法.在set方法的最后调用了createTrack_l创建音轨.我们现在来分析createTrack_l的流程 ...
- java安全HTTPS工具类
import java.io.FileInputStream; import java.security.KeyStore; import java.security.SecureRandom; im ...
- Shell遍历文件的每一行
由于使用for来读入文件里的行时,会自动把空格和换行符作为一样分隔符,因为当行里有空格的时候,输出的结果会很乱,所以…… cat input.txt |while read line> do&g ...
- java创建XML及开源DOM4J的使用
java import java.io.File; import java.io.StringWriter; import javax.xml.parsers.DocumentBuilder; imp ...
- Windows 10 TH2
Windows 10 TH2到底更新了啥? 15年11月,微软正式向Windows 10用户推送了Threshold 2(简称TH2)更新, 也就是传说中的November Update.更新后系统版 ...