我刚刚在ListView内部实现了HorizontalScrollView但是列表视图不能顺利滚动。 我想显示一个列表视图,一些列表项有一个HorizontalScrollView.My HorizontalScroll滚动顺利,但Listview不是。
以下是我的代码:
<ListView
android:id="@+id/list_view"
android:scrollbars="none"
android:visibility="gone"
android:divider="@color/LtGreen"
android:dividerHeight="1dp"
android:smoothScrollbar="true"
android:scrollingCache="false"
android:animationCache="false"
android:cacheColorHint="@android:color/transparent"
android:listSelector="@android:color/transparent"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
适配器类中我的getView方法的代码是 -
mHolder.mainLinearType1 = (LinearLayout) view.findViewById(R.id.main_linear);
mHolder.hsv1 = (HorizontalScrollView) view.findViewById(R.id.hsv);
为适配器项加载HorizontalScrollView的代码是 -
ScrollHandler mHandel = new ScrollHandler(mHolder.mainLinearType1, position);
mHandel.loadLazyView();
我的处理程序是 -
public static class ScrollHandler extends Handler{
LinearLayout mLayout;
int mPosition;
public ScrollHandler(LinearLayout linear,int pos){
mLayout = linear;
mPosition = pos;
}
public void loadLazyView(){
Runnable r = new Runnable() {
@Override
public void run() {
mLayout.removeAllViews();
for (int i = 0; i <mList.get(mPosition).getEventList().size(); i++) {
View additionView = mLayoutInflater.inflate(R.layout.activity_type1_subitem_view, null,false);
FrameLayout innerLinnerLayout=(FrameLayout)additionView.findViewById(R.id.frame_view);
mLayout.addView(innerLinnerLayout);
}
}
};
r.run();
}
}
如何使listview顺利进行。
提前致谢。
答案 0 :(得分:0)
检查一下:
http://developer.android.com/training/improving-layouts/smooth-scrolling.html
我认为这就是你所需要的。使用ASyncTask应该使它顺利。
答案 1 :(得分:0)
为什么ScrollHandler在没有执行任何特定于处理程序的工作时会扩展Handler?逻辑可以用简单的方法实现
loadLazyView (LinearLayout linear,int pos){...}
我认为列表很慢,因为它具有复杂的层次结构。按照链接列表6一般方法使您的滚动更顺畅。如果你已经看过这个,那么请原谅。
http://leftshift.io/6-ways-to-make-your-lists-scroll-faster-than-the-wind
摘要是
- 减少适配器的getView中使用的条件数。
- 检查并减少日志中收到的垃圾回收警告数
- 如果您在滚动时加载图片,请删除它们
- 将scrollingCache和animateCache设置为false(稍后会详细介绍)
- 简化列表视图行布局的层次结构
- 使用视图持有者模式
醇>