使用滚动列表视图似乎真的很麻烦。我有一个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布局。
答案 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);