`

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

阅读更多
已不推荐!推荐:http://gundumw100.iteye.com/blog/1732987


正常来说,在ScrollView添加一个ListView后在真机上只会显示ListView的一行多一点,我也不理解为什么会这样,后来我把ListView的layout_height改成400dip,而不是用match_parent和wrap_content,我发现这样的话ListView就显示的多了很多。所以就产生了把ListView所有的item的高度算出来给ListView设置的想法。下面是代码:
public void setListViewHeightBasedOnChildren(ListView listView) {
        ListAdapter listAdapter = listView.getAdapter(); 
        if (listAdapter == null) {
            return;
        }

        int totalHeight = 0;
        for (int i = 0; i < listAdapter.getCount(); i++) {
            View listItem = listAdapter.getView(i, null, listView);
            listItem.measure(0, 0);
            totalHeight += listItem.getMeasuredHeight();
        }

        ViewGroup.LayoutParams params = listView.getLayoutParams();
        params.height = totalHeight + (listView.getDividerHeight() * (listAdapter.getCount() - 1));
        params.height += 5;//if without this statement,the listview will be a little short
        listView.setLayoutParams(params);
    }

在代码的倒数第二行二我又给加了5个像素,这是因为我在listview的属性里面添加了padding=5dip。
然后每次ListView的数据一有变化就用这个函数设置一下就好了,不过这样总感觉效率很低,希望有达人给指点一下。

简单来说就是把layout_height写死,这种办法也很适用于GridView(如果能估计得出GridView的高度的话)。


listview与ScrollView老问题的另类解法
http://www.eoeandroid.com/thread-42893-1-1.html
这几天一直被listview怎么合理的放进scorllview中的问题困扰,尝试过把listview放入scorllview中的朋友都知道,被放入的listview显示是有问题的,无论怎么设置layout都只显示大概2行的高度,看起来很郁闷,更别说美观了,后来上网查询了一下,解决方法有的是用linearlayout替换listview,还有修改onmeasure的,我比较懒个人感觉很麻烦不喜欢,终于想出了一个还算和谐的解决方法:xml中的textlist设置如下:
<?xml version="1.0" encoding="UTF-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical"
    android:background="#44444444">
<ScrollView
     android:layout_width="fill_parent"
     android:layout_height="wrap_content">
    <LinearLayout
            android:id="@+id/ll1"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:scrollbars="vertical"
            android:orientation="vertical"
            android:paddingLeft="15dp"
            android:paddingRight="15dp"
            android:paddingTop="30dp"
            android:paddingBottom="30dp"
            android:background="#ff888888">
            <TextView
                    android:text="あ"
                    android:textColor="#ffeeeeee"
                    android:textSize="18sp"
                    android:layout_width="fill_parent"
                    android:layout_height="wrap_content"></TextView>
            <ListView
                    android:scrollbars="none"
                    android:stackFromBottom="true"
                    android:id="@+id/lv0"
                    android:layout_width="fill_parent"
                    android:layout_height="20dp"></ListView>
                    </LinearLayout>
</ScrollView>
</LinearLayout>
其中的textview是我做的东西要用到的,和方法无关可以不看,然后就是在java中重新设置listview的高度了,目的是把listview“撑”开:
LinearLayout.LayoutParams  lp5 =new LinearLayout.LayoutParam(LayoutParams.FILL_PARENT, listItem.size()*51-1);
其中第一个属性不必说了,第二个是为了计算listview要设置的总高度用的,51是我事先设置好的一行的高度(50)+每行之间的间隔(1)而得来的,listItem.size()是我要显示的行数,用.setLayoutParams(lp5);来重新设置高度,其他别的设置跟以前一样,想要源码我整理完之后贴出来


如果不想写死,那就看下面的文章
Android 解决ListView 和 ScrollView 共存冲突的问题
http://labs.chinamobile.com/mblog/532767_72693?wralxianxrnx
http://blog.liaoxiaoqi.com/?p=503
分享到:
评论

相关推荐

    解决scrollView和listview滚动冲突,实现listview滑动到顶端和底部之后还能拖拽一定的距离,松开后返回

    然而,在实际应用中,当这两种组件同时存在于一个界面时,滚动冲突的问题就会出现,导致用户体验下降。本文将详细探讨如何解决这种冲突,并实现类似微信聊天页面中列表滑动到顶部或底部后还能继续拖拽一段距离,松手...

    ScrollView嵌套两个ListView

    解决这个问题的一种常见方法是自定义一个ViewGroup,继承自ScrollView,然后在这个自定义布局中管理两个ListView。这样,你可以重写onInterceptTouchEvent和onTouchEvent方法,来处理触摸事件,使得每个ListView只...

    ScrollView中自定义ListView

    为了解决这个问题,我们需要自定义一个ListView,让它能在ScrollView内正常工作。自定义ListView的关键在于保持ListView的滚动特性,同时避免与ScrollView的滚动冲突。我们可以通过重写onMeasure()和onLayout()方法...

    ScrollView中嵌套Listview(两个)

    当需要在一个页面中展示大量数据,同时希望用户能滚动查看所有内容时,可能会尝试将ListView嵌套在ScrollView中。然而,这种做法通常会导致一些问题,如滚动冲突、只显示部分ListView项等。本文将深入探讨如何解决...

    ScrollView不冲突嵌套ListView

    为了解决这个问题,我们可以自定义一个ListView,重写onMeasure()方法,使其测量自身时考虑ScrollView的约束。同时,我们还需要在ListView的Adapter中确保每个Item的高度是固定的,以防止动态高度导致的滚动混乱。 ...

    安卓listview相关相关-解决ScrollView里面嵌套ListVIew引起的高度和滚动问题.zip

    然而,当在一个ScrollView内嵌套一个ListView时,常常会遇到一些问题,比如滚动冲突、布局高度计算错误等。这个问题是由于两个可滚动组件共存导致的,Android系统无法正确处理它们之间的交互。 首先,我们要理解...

    ScrollView中嵌套ListView的例子

    ScrollView是一个可滚动的单向容器,它可以包含多个子视图,但默认情况下,它只能滚动一个方向——通常是垂直方向。当ScrollView中的内容超过屏幕大小时,用户可以通过滑动来查看未显示的部分。 接着,我们来看看...

    ScrollView嵌套ListView滑动冲突的解决方法

    当需要在一个界面中同时展示大量数据和一些额外内容时,可能会将ListView嵌套在ScrollView中,但这种做法往往会导致滑动冲突的问题,即用户难以确定是想滚动整个ScrollView还是单独滑动ListView。本文将深入探讨这个...

    解决ListView 和 ScrollView 共存冲突的问题

    ListView用于显示大量可滚动的数据列表,而ScrollView则是一个可以容纳单个子视图并允许垂直滚动的容器。然而,当试图在同一布局中同时使用这两个控件时,通常会出现冲突,因为它们都具有滚动功能,系统无法正确处理...

    ScrollView嵌套ListVIew两者之间滑动问题

    然而,当在一个ScrollView中嵌套一个ListView时,就会出现一些特殊的问题,主要是关于滑动事件的处理,即所谓的“滑动冲突”。 首先,我们要理解滑动冲突的本质。当ScrollView和ListView同时存在于同一个布局中,...

    ScrollView嵌套ListView刷新

    2. **使用Header和Footer**:如果只是想在ListView顶部或底部添加一个固定的ScrollView,可以考虑使用ListView的addHeaderView()和addFooterView()方法,将ScrollView作为头部或尾部添加,这样就不需要嵌套,避免了...

    ScrollView,嵌套ListView,ListView并同时嵌套GridView

    在实际开发中,我们有时需要在一个视图中同时使用ScrollView、ListView和GridView。例如,ScrollView作为最外层容器,用来包裹整个布局,提供整体的滚动效果;ListView用于显示长列表,每个列表项内可能又包含一个...

    scrollview与listview嵌套问题

    在某些情况下,可能需要自定义解决方案,例如创建一个自定义的滚动视图,它结合了ScrollView和ListView的优点,同时解决了滚动冲突和性能问题。这种方法需要深入理解Android的触摸事件处理机制和视图绘制流程。 ...

    listview在scrollview中完整显示

    5. **监听滚动事件**:如果需要在ScrollView滚动时执行某些操作,可以为ScrollView添加滚动监听,利用`OnScrollListener`接口中的方法,如`onScroll()`和`onScrollStateChanged()`。 通过以上步骤,我们便能成功地...

    scrollview与listview嵌套问题 Eclipse版

    ScrollView是一个可以包含单个直接子视图的滚动容器,而ListView则用于展示一个可滚动的项目列表。当在Eclipse环境下处理这两种组件的嵌套问题时,开发者可能会遇到一系列挑战。本文将深入探讨这些问题及其解决方案...

    自定义ScrollView与ListView结合使用

    在Android开发中,有时我们需要在一个页面中展示大量的可滚动内容,并且这些内容可能包含多个不同类型的视图,这时就会涉及到ScrollView和ListView的结合使用。本文将深入探讨如何解决两者结合时可能出现的问题,...

    ScrollView和ListView和GridView冲突解决

    然而,ScrollView不支持动态加载和复用视图,这意味着如果试图将一个包含大量子视图的ListView或GridView放入ScrollView,会导致性能问题和滚动不流畅。 ListView是一种高效的列表展示组件,它通过复用视图...

    四种方法解决ScrollView嵌套Listview

    在Android开发中,ScrollView和ListView的嵌套是一个常见的需求,但也是一个挑战,因为它们都是滚动视图,直接组合可能导致冲突和不可预期的行为。本篇文章将详细介绍四种解决ScrollView嵌套ListView问题的方法,...

    解决ScrollView嵌套ListView问题的几种方案

    然而,当在一个ScrollView中嵌套一个ListView时,会遇到一系列的问题,主要是由于两者都具有滚动功能,导致冲突,用户体验受到影响。本文将探讨几种解决这种问题的方案。 ### 方案一:使用NestedScrollView替代...

    弹性拉伸Scrollview、scrollview嵌套listview和scrollview滑动监听demo

    本文将深入探讨如何实现“弹性拉伸”的ScrollView、在ScrollView中嵌套ListView以及添加ScrollView的滑动监听。这些技巧在创建复杂的用户界面时非常实用。 首先,让我们谈谈“弹性拉伸”效果的ScrollView。这种效果...

Global site tag (gtag.js) - Google Analytics