ListView滚动不顺畅

时间:2013-03-12 08:40:53

标签: android listview scroll

使用滚动列表视图似乎真的很麻烦。我有一个listview,适配器,我准备所有数据(所有网络调用),然后填充listview适配器。

滚动不顺畅,如果我在ScrollView中实现ListView,大部分时间都不起作用

<ScrollView
    android:layout_width="fill_parent"
    android:layout_height="wrap_content" >

    <ListView
        android:id="@+id/rideList"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_below="@id/customersTitle"
        android:background="@drawable/roundcornersgreyback"
        android:scrollbarSize="3dp"
        android:scrollbarStyle="outsideOverlay"
        android:scrollbars="vertical"
        android:scrollingCache="true"
        android:smoothScrollbar="true"
        android:visibility="visible" />
</ScrollView>

当我在没有ScrollView的情况下滚动时,只需使用ListView本身的属性,列表滚动,但是在我的布局底部有一个部分丢失。页脚是隐藏的。

<ListView
    android:id="@+id/rideList"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:layout_below="@id/customersTitle"
    android:background="@drawable/roundcornersgreyback"
    android:scrollbarSize="3dp"
    android:scrollbarStyle="outsideOverlay"
    android:scrollbars="vertical"
    android:scrollingCache="true"
    android:smoothScrollbar="true"
    android:visibility="visible" />

如果我将ScrollView放到布局的根目录,列表视图就无法滚动。

我做错了什么?需要滚动列表和视图是否很疯狂?

编辑:代码按照viewHolder布局。

3 个答案:

答案 0 :(得分:3)

根据我的理解,至少有两个问题导致您的实施滞后:

首先,您在ScrollView中使用ListView,这不是一个好主意。来自ScrollView上的API文档:

  

你永远不应该使用带有ListView的ScrollView,因为ListView负责自己的垂直滚动。最重要的是,这样做会使ListView中的所有重要优化都无法处理大型列表,因为它有效地强制ListView显示其整个项目列表以填充ScrollView提供的无限容器。

其次,如果您确实希望ListView顺利滚动,则应使用实现ViewHolder模式的适配器来回收视图,而不是为每个列表元素创建新视图。有很多很好的例子,只需搜索“ListView ViewHolder”之类的内容,你就会得到一些很棒的教程。

答案 1 :(得分:2)

  

Listview页脚用作页脚布局

  View footerView =  ((LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE)).inflate(R.layout.footer_layout, null, false);
        list.addFooterView(footerView);

http://developer.android.com/reference/android/widget/ListView.html

答案 2 :(得分:2)

The world of listview by google developers。看看链接。使用viewholder解释它为什么会提高性能。在自定义列表适配器中使用ViewHolder。回收视图将有助于滚动顺畅。屏幕上可见的Thoese视图无法回收。

您每次都在调用findViewById()。因此,随着列表的增加,性能下降。 因此,回收视图是提高列表视图性能的方法。

此链接http://www.vogella.com/articles/AndroidListView/article.html包含教程,可帮助您了解ViewHolder标题下的VIEWHOLDER PATTERN。

static class ViewHolder {
TextView text;
}

ViewHolder holder = new ViewHolder();
if(convertView==null)
{
 holder.text = (TextView) convertView.findViewById(R.id.listitem_text);
 convertView.setTag(viewHolder);
}
holder = (ViewHolder) rowView.getTag();
holder.text.setText("hello);