ScrollView嵌套ListView的显示不全及滑动问题 20C

需求描述:要在一个页面显示比较多的数据,如:旅图详情页面需要显示旅图照片、评论列表等等内容;而且页面可以上下滑动;当个人动态列表滑动到底部时,可以加载更多的评论。
如图-1:

旅图详情页

思路分析:因为要在一个页面显示较多的数据,且还有评论列表这样的模块,一下子想到使用ScrollView嵌套ListView,ScrollView可以上下滚动,ListView用于加载评论列表。

发现的问题:按照上面的思路,我做了尝试,发现两个问题:1) ListView显示不全:ListView只显示第一个。2) ListView不能上下滑动。
解决尝试:经过一番搜索,看到网上有这样的一些解决办法,本人都一一拿来尝试:
a) 在ScrollView的布局文件中加入配置android:fillViewport="true",试下来后发现ListView能显示的大一些了,充满了屏幕,但是还是不能滑动显示全部的评论。
b) 用代码设置ListView的高度,即根据ListView中item数目的个数设置ListView的高度,这样滑动屏幕就能将看到所有评论。
但问题又来了:因为评论数据可能会很多,现在的做法是进入旅图详情页面时,只展示部分评论,当页面下拉到最后一条评论时,通过“上拉加载更多”的滑动方式去查询更多评论,但是发现滑动不了,ListView滑动不了。为此又经过了一番的搜索,是因为ViewGroup的事件拦截和触发机制的原因,当然可给出了一些方法,为此又做了一些尝试:
c) 重写ScrollView的onInterceptTouchEvent()方法,直接返回false,即可将屏幕事件传递给子View,即可响应事件。
那么问题又来了,我只能把触摸点放在评论区域内,才能下拉加载更多,能不能触摸点在评论列表之外时,也能使评论区域上拉加载更多?另外如果想要使触摸屏幕上的任何一个点都可以往上滑动,该怎么做?因为发现当触摸点在评论列表上时,不能往上滑动,显示效果如图-2:

评论列表

其实我最终想要实现的目标就像是微博的具体内容展示页那样。
当然看到网上也有推荐不要用ScrollView嵌套,而使用ListView的header。
再此,希望高手能帮忙解答下!!!

8个回答

网上解决ScrollView嵌套ListView滑动冲突的有好多,下拉加载更多的方法这里我不建议在listview做,既然外层已经是ScrollView了,可以把下拉加载事件绑定到ScrollView,或者不要下拉加载换成点击加载更多。
然后,ScrollView嵌套ListView会一次性把所有的列表都加载绘制出来,需要资源和性能。如果可以尽量考虑用ListView,addHeaderView和addFooterView能解决大部分类似情况。

youshi520000
_有时丶 回复KaneTing: 是的。
3 年多之前 回复
XiaoYouSiFang
KaneTing 恩,我说错了,是想使用ListView的加载更多,而不是下拉刷新。那一般使用ListView的addHead么?
3 年多之前 回复

你需要重新定义一个listview,然后measure得到所有item的长度
http://yxwang0615.iteye.com/blog/1739187

XiaoYouSiFang
KaneTing 我试了下,是可以滑动显示全部的Item,但是我想上拉加载更多,这个怎么做?发现嵌套后,listView不能响应事件了
3 年多之前 回复

import android.content.Context;
import android.util.AttributeSet;
import android.widget.ListView;

/**

  • @author jiarh *2014-8-14 */ public class UserListView extends ListView { public User......
    答案就在这里:ScrollView 嵌套ListView 滑动冲突,与显示不全
    ----------------------Hi,地球人,我是问答机器人小S,上面的内容就是我狂拽酷炫叼炸天的答案,除了赞同,你还有别的选择吗?

非要用Scrollview嵌套Listview的话,Listview需要全部展开的,复写Listview的onMeasure方法:

@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
    int expandSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2,
            MeasureSpec.AT_MOST);
    super.onMeasure(widthMeasureSpec, expandSpec);
}

不过这个有一个缺点就是无法复用,另外还有一个方案就是上半部分使用Header添加到Listview中去,其他的作为Item复用就可以了,建议用后者

XiaoYouSiFang
KaneTing 恩,对于事件的响应机制,研究了下感觉还是不知如何下手,所以决定采用给ListView添加Header的做法,谢谢!
3 年多之前 回复

我的博客 http://blog.csdn.net/q610098308/article/details/50349465
这个应该可以完美解决你的问题;因为我也遇到了这种情况;

XiaoYouSiFang
KaneTing 那事件响应的问题有遇到过么?
3 年多之前 回复

android 解决ScrollView嵌套ListView的问题,不能全屏,全屏不能显示下面控件

有去我博客里看最新的就是事件问题

重写ListView的onMeasure:
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
int expandSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2,
MeasureSpec.AT_MOST);

super.onMeasure(widthMeasureSpec, expandSpec);

}

如果你的下拉刷新用的XListView,也可以直接在里面的onMeasure中修改,不过还是推荐试用外层布局刷新,这里最好不要用ListView的刷新

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
ScrollView 嵌套ListView显示不全
ScrollView 嵌套ListView显示不全,用这个类自定义ListView,可解决问题.
ScrollView嵌套ListView显示不全解决方案
网上也找到几个方法解决但是感觉最好的最简单的还是以下的自定义ListView好用 创建自定义View继承ListView实现三个构造方法,重写onMeasure(int widthMeasureSpec, int heightMeasureSpec)方法public class MyListview extends ListView { public MyListview(Context c
ScrollView嵌套listView显示不全解决办法
前一段时间找工作面试的时候被问了一个问题,ScrollView嵌套listView显示不全时改如何解决。当时我时被问蒙了,回来之后各种百度,现在闲下来了也把我总结的方法给大家分享一下。
Scrollview嵌套listview时显示不全
大概需求是这样的,listview下有一个按钮,会显示不全,我准备在外面嵌套一层scrollview,这样可以做到可以滑动,于是我加了这样一段代码           android:id= "@+id/scroll_view"         android:layout_width= "match_parent"         android:layout_height=
ScrollView嵌套listView,嵌套Gridview显示不全的解决办法
ScrolView里面嵌套了listview或者ScrollView里面嵌套GridView显示不全,只显示一条,是不是很揪心,其实,作为程序员,遇到问题找答案才是对的,不可以揪心,大不了不嵌套嘛,怎么能...怎么能???珍惜生命,哈哈...
ScrollView嵌套Listview导致Listview显示不全解决方案
在做大量图片展示的APP的时候(如电商项目)经常需要用ScrollView去嵌套Listview(Gridview),由于ScrollView和Listview中都有上下滑动属性,所以产生了冲突。解决的办法是让Listview完全展开,只需要重写一下Listview的onMeasure(int widthMeasureSpec, int heightMeasureSpec)方法即可。public c
Android之ScrollView嵌套ListView显示不全的问题
【网上很多说使用动态修改listview高度的方法,然而并不能解决每个item高度不同的listview的显示不全的问题。如下第一种方法,建议使用第二种方法】 一、在数据适配器通知数据改变后调用以下方法,动态修改listview的高度 [代码]: =================== /** * 动态设置ListView的高度 * @param listView
解决ScrollView嵌套ListView显示不全问题
在看本文之前请写了解一下UNSPECIFIED、EXACTLY、AT_MOST三种模式。   在项目中经常会用到ScrollView嵌套ListView的情况。如果使用原生的ListView会出现只显示一行的情况:   出现这个的原因是在scrollView中ListView在OnMeasure阶段无法测出实际的高度,我们需要给他设置AT_MOST模式以支持很大的高度。这时候可以自定义一个M
ScrollView嵌套ListView冲突高度显示不全问题
实习中遇到了ScrollView里放置一个ListView的情况,照常书写代码测试的时候出现这种情况:   就是只显示一个item的高度。上网搜索了之后才知道是ScrollView嵌套ListView会无法正确计算高度,导致只显示一个item的高度。   网上解决的思路也有很多,一种是不要在ScrollView里放置ListView,换成其他的布局方式比如ScrollView+LinearL
解决ScrollView嵌套ListView滑动冲突显示不全的问题
RT、 要想解决这个问题,有2种解决方案: 1、固定ListView的高度(自己一点点的调试,适当地将高度设置高一点); 2、计算ListView的高度(其实也算是固定高度,只不过是通过代码进行了计算然后再固定)。 方法1就不用多说了,方法2我把代码放上来吧。 public class ListViewUtils{ public static void setHeight(Li
ScrollView嵌套ListView,解决显示不全的问题
ScrollView嵌套ListView,解决显示不全的问题
scrollview嵌套listview最后一行显示不全的问题
记录自己的每一个问题,也好让自己记住 实际上不光是ListView,其他继承自AbsListView的类也适用,包括ExpandableListView、GridView等等,都会有这样的问题 我们在用scrollview嵌套listview的时候必须得计算listview的高度,必须只能被布局包裹,否则的话就只能显示一行,所以得计算高度 计算高度的代码: public stati
解决ScrollView下嵌套ListView、GridView显示不全的问题
1.使用网上用的动态改变listview高度的方法,该方法只适用于item布局是LinearLayout布局的情况,不能是其他的,因为其他的Layout(如RelativeLayout)没有重写onMeasure(),所以会在onMeasure()时抛出异常。所以使用限制较大。     public class Utility { public static void setList...
ScrollView嵌套ListView滑动冲突解决
在一些特殊界面的设计里面,使用ScrollView嵌套ListView的情况还是比较常见的。由于ScrollView和ListView都有对滑动事件的监听和处理,所以两者嵌套肯定会存在滑动冲突的问题。我们知道Android事件是根据“冒泡”机制层层传递的,既从父View到子View层层处理,因此我们思考从ListView的“View父”ScrollView进行冲突处理。 从网上查阅资料和对Scr
ListView显示不全,ViewPager显示不全,ScrollVIew嵌套ViewPager显示问题
ListView显示不全,ViewPager显示不全,ScrollVIew嵌套ViewPager显示问题
ScrollView嵌套ScrollView滑动
ScrollView 嵌套ScrollView 事件分发问题
ScrollView嵌套ListVIew两者之间滑动问题
不废话,直接上代码, 1,先简单复写ScrollVIew: package demo.com.listviewinscrollview; import android.content.Context; import android.util.AttributeSet; import android.widget.ScrollView; /** * Created by Alv_chi o
scrollview嵌套listview,gridview 显示不全万能解决办法
只要重写onMeasure方法即可,代码如下: /* * 重写onMeasure方法,达到使ListView GridView适应ScrollView的效果 */ @Override     public void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {         super.onMeasure(wid
ScrollView嵌套ListView,Listview条目显示不全解决方法(嵌套GridVeiw同理)
ListView显示条目不全,可以自定义Listview 下面就是ListVeiw的自定义,直接把代码考进去就行了 public class MyListView extends ListView { public MyListView(Context context) { super(context); } public MyListView(Co
ScrollView中嵌套ListView滑动问题
我们都知道在ScrollView中嵌套ListView的时候会出现问题,那就是ListView中又多条数据的时候也是只显示一条,解决办法是 自定义ListView,然后重写里面的onMesure()方法。 protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { int expandSpec =
ScrollView嵌套ListView显示和滑动问题
ScrollView嵌套ListView显示和滑动问题 显示问题  ScrollView中嵌套ListView我测试时,若是高度显示用布局调整android:layout_height=""不管用了,那么这里提供给大家提供两种方法: 方法一:通过在Activity中计算ListView的item高度,并重新布局 int totalHeight = 0; for (int i = 0,
scrollview嵌套Listview解决滑动问题
1.如果listview是在scrollview下 ,那么 Listview一定无法滚动。有两种解决方法 第一种计算listview的高度,第二种通过事件的传递 从而解决listview无法滚动的问题 。 我个人也更偏向第二种方法,下面我就详细介绍下第二种方法 2.创建一个类继承scrollview(具体代码如下) public class ScrollViewC extends Sc
解决scrollview嵌套listview显示不全的四种方法
重新测量listview高度,或者自定义listview
scrollview中嵌套listview 数据显示不全
处理方法一: 1、当Item的布局是LinerarLayout时:(此方法不推荐) private void showAllListView() { if (lotteryStyleAdapter != null) { int totalHeight = 0; for (int i = 0; i { View listItem = lotteryStyl
ScrollView嵌套listView和Viewpager后的显示不全解决
由于项目要求,需要在Viewpager中有一个是片段是ScrollView,而scrollView中需要嵌套另外的ViewPager跟其他如listView的视图,这里先解决下scrollView中嵌套ViewPager与listView后显示不全的问题。 xml布局文件: 自定义listView,重写他的onMeasure方法:解决listView显示不全 自定义Vie
【控件使用】ScrollView嵌套ListView数据显示不全问题解决
1、问题:嵌套在 ScrollView的 ListVew数据显示不全,在布局文件,不管怎么调整高度,最多只显示两条数据。 2、解决办法:重写 ListVew。 public class MyListView extends ListView { public MyListView(Context context, AttributeSet attrs) { super(co
ScrollView嵌套ListView导致item显示不全的原因
一句话总结:ScrollView重写了它的父类FrameLayout的measureChild和measureChildWithMargins方法,使传入子类的HeightMeasureSpec的模式为UNSPECIFIED,导致listview计算高度时跳过了measureHeightOfChildren方法的执行,只计算了第一个item的高度。 分析:首先看listview的onMeasure方
ScrollView嵌套ListView显示不全时原理浅析
ScrollView中嵌套ListView一般很少用,但也是个经典的话题,至于怎么解决,网上可用的代码有很多,就不贴了。这里我我想聊聊为什么显示不全呢?我们是不是找找病根呢?哈哈,等等让我穿好白大褂。1. 预防针1.1 三种测量模式MeasureSpec.AT_MOST :父控件有多大我就显示多大--->warp_content MeasureSpec.EXACTLY :你指定多大就显示多大--->
listview和scrollview嵌套数据显示不全问题解决!
public class HeightFixListView extends ListView { public HeightFixListView(Context context) { super(context); } public HeightFixListView(Context context, AttributeSet attrs) {
ScrollView嵌套Gridview显示不全的问题
在开发过程中,遇到ScrollView嵌套GridView时会遇到GridView的内容显示不完全的问题,解决的方法就是先获取gridview的高度然后让ScrollView给其预留合适的尺寸,我们可以自定义GridView,重写onMeasure()方法,来解决:/** * Created by wk on 2017/3/3. * 解决ListView中嵌套gridview显示不全问题 */
两种方法解决ScrollView嵌套ListView出现ListView显示不全的问题
一、设置ScrollView的fillViewport=true  二、自定义ListView,重写onMeasure方法 二二
工具篇——ListViewForScrollView(解决ScrollView嵌套ListView,ListView显示不全的问题)
写代码的四点:     1.明确需求。要做什么?     2.分析思路。要怎么做?(1,2,3……)     3.确定步骤。每一个思路要用到哪些语句、方法和对象。     4.代码实现。用具体的语言代码将思路实现出来。学习新技术的四点:     1.该技术是什么?     2.该技术有什么特点?(使用需注意的方面)     3.该技术怎么使用?(写Demo)     4.该技术什么时候用?(在Pr...
scrollView和listView的滑动冲突和listView显示不全
在开发过成功,我们经常要用到listView和ScrollView嵌套的布局,但是当外层为ScrollView时有时候就会出现listView命名有N行item但是却只显示了一条item项,这是因为我们需要重新计算listView的项高度,下面直接上代码注释很详细,可以粘贴直接使用: package com.jgkj.bxxc.tools; import android.con
ScrollView嵌套ListView问题
ScrollView嵌套ListView问题,通过自定义listview解决
ScrollView和ListView嵌套ListView显示不全问题
不知道大家在使用ScrollView嵌套ListView的过程中有没有发现过这样一个问题,那就是ScrollView嵌套ListView的时候无论我们怎么设置ListView的宽和高,ListView都会显示不全,并且大家有没有发现它只会显示ListView的一个条目。那么为什么会出现这个问题,同时这个问题又是怎么处理的,别急先听我慢慢道来。首先我们先看一下,ScrollView和ListView嵌
ScrollView 嵌套ListView问题
rn[img=https://img-bbs.csdn.net/upload/201511/24/1448340167_867831.png][/img]rnrn自定义的 listview中实现左右侧滑删除的功能。。。。(如图) listview继承SwipeMenuListView rn自定义的listview中/ @Overridern public boolean onTouchEvent(MotionEvent ev) rn requestDisallowInterceptTouchEvent(true);rn return super.onTouchEvent(ev);rn rnrnrn是Scrollview不抢Listview的点击事件 但问题是在点击listview区域的时候 scrollview不能滑动 rn这导致的问题是 如果货物添加过多,则没办法滑动Scrollview进行查看 rnrnmLst.setOnTouchListener(new OnTouchListener() rnrn @Overridern public boolean onTouch(View v, MotionEvent event) rnrn switch (event.getAction()) rn case MotionEvent.ACTION_DOWN: // 按住屏幕rn mScrollView.requestDisallowInterceptTouchEvent(true);rn Log.e("父控件获取权限", "获取");rn break;rn case MotionEvent.ACTION_MOVE: // 移动rn mScrollView.requestDisallowInterceptTouchEvent(false);rn Log.e("父控件下方权限", "下放");rn break;rn case MotionEvent.ACTION_CANCEL:rn mScrollView.requestDisallowInterceptTouchEvent(false);rn Log.e("父控件下方权限", "下放");rn break;rn rnrn return false;rn rn );rn在listview中也对其的ontouch做了处理 但是问题是点击删除按钮时触发action_down时 导致listview获取不到点击事件rnrn求大神赐教[img=https://forum.csdn.net/PointForum/ui/scripts/csdn/Plugin/003/monkey/11.gif][/img]
弹性拉伸Scrollview、scrollview嵌套listview和scrollview滑动监听demo
弹性拉伸Scrollview、scrollview嵌套listview和scrollview滑动监听demo
(源码分析)ScrollView嵌套ListView/GridView的滑动事件处理
开发过程中经常会遇到使用scrollview嵌套listview或gridview的情况,这时由于scrollview拦截消费了滑动事件,所以在listview或gridview区域滑动时该区域无法滑动,而是scrollview整体滑动。 正确的处理应该是当焦点在listview或gridview区域该区域滑动,在区域外则scrollview滑动。 想要解决这个问题,加上如下代码即可:
ScrollView嵌套LIstView,滑动监听冲突解决
有时候我们需要在Scollview里面嵌套listview,这个时候就会发现listview的高度只显示一行,并且监听又冲突,这个Demo就是解决这个问题。详细介绍在http://blog.csdn.net/hj363049394/article/details/26590079#
ScrollView嵌套listview滑动位置底部bug
三种方案,个人推荐第三种: 1 sv.fullScroll(ScrollView.FOCUS_UP); 2 sv.setScrollY(0); 3 sv.smoothScrollTo(0,20); 滑动冲突解决listView: public class ListViewForScrollView extends ListView { public ListViewFor
相关热词 c# 去空格去转义符 c#用户登录窗体代码 c# 流 c# linux 可视化 c# mvc 返回图片 c# 像素空间 c# 日期 最后一天 c#字典序排序 c# 截屏取色 c#中的哪些属于托管机制