ListView中的水平ScrollVIew无法正确滚动

时间:2015-01-23 06:15:52

标签: android listview android-listview horizontalscrollview

我刚刚在ListView内部实现了Horizo​​ntalScrollView但是列表视图不能顺利滚动。 我想显示一个列表视图,一些列表项有一个Horizo​​ntalScrollView.My Horizo​​ntalScroll滚动顺利,但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);

为适配器项加载Horizo​​ntalScrollView的代码是 -

    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顺利进行。

提前致谢。

2 个答案:

答案 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

摘要是

  
      
  1. 减少适配器的getView中使用的条件数。
  2.   
  3. 检查并减少日志中收到的垃圾回收警告数
  4.   
  5. 如果您在滚动时加载图片,请删除它们
  6.   
  7. 将scrollingCache和animateCache设置为false(稍后会详细介绍)
  8.   
  9. 简化列表视图行布局的层次结构
  10.   
  11. 使用视图持有者模式
  12.