0

使用滚动列表视图似乎真的有问题。我有一个 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 布局。

4

3 回答 3

3

据我了解,至少有两个问题使您的实施滞后:

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

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

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

于 2013-03-12T08:47:44.607 回答
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

于 2013-03-12T08:47:51.940 回答
2

谷歌开发者的列表视图世界。看看链接。解释使用 viewholder 及其提高性能的原因。在自定义列表适配器中使用 ViewHolder。回收视图将有助于平滑滚动。那些在屏幕上可见的视图是无法回收的。

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

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

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);
于 2013-03-12T09:11:48.570 回答