ListView无法顺利滚动

时间:2015-01-22 06:17:32

标签: android listview horizontalscrollview

我有一个列表视图,其中我有3种不同类型的视图,并且该视图的一种类型包含水平滚动视图。 在水平滚动视图内部我有线性布局,我在其中为我的自定义xml充气。 所有这些工作,但父列表视图的滚动不顺利。 当我评论我的水平滚动视图代码时,列表滚动顺利。 以下是我的代码:

@Override
public View getView(final int position, View convertView, ViewGroup parent) {
    view = convertView;
    int type = getItemViewType(position);
    if(view == null){
         mHolder = new ViewHolder();
    if (type == 0) {
         mHolder.mainLinearType1 = (LinearLayout) view.findViewById(R.id.main_linear);
         mHolder.hsv1 = (HorizontalScrollView) view.findViewById(R.id.hsv);
    }
    if (type == 1) {
    ....
    }
    if (type == 2) {
     ....
    }
    view.setTag(mHolder);
 }
  else{
        mHolder = (ViewHolder) view.getTag();
 }
 if(type==0){
  mHolder.mainLinearType1.removeAllViews();

  for (int i = 0; i <mList.get(position).getEventList().size(); i++) {
      View additionView = mLayoutInflater.inflate(R.layout.activity_type1_subitem_view, null,false);

      FrameLayout innerLinnerLayout=(FrameLayout)additionView.findViewById(R.id.frame_view);

      ImageView activityImage = (ImageView) additionView.findViewById(R.id.activity_iv);

      ProgressBar pb = (ProgressBar) additionView.findViewById(R.id.progress);

      AQueryImageDownloader.loadImage(activityImage, pb, mList.get(position).getEventList().get(i).getEventImagePath(), mContext);

      mHolder.mainLinearType1.addView(innerLinnerLayout);    
    } 
  }

我已经尝试了很多,但无法正确滚动。 我也尝试查看寻呼机和水平listView。但同样的问题也会发生。 请帮忙解决这个问题。

提前致谢。

EDITED

下面是我在xml中的listview:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
   android:id="@+id/container_ll" 
   android:layout_width="match_parent" 
   android:layout_height="match_parent"
   android:background="@color/White">

  <include
       android:id="@+id/header_view" 
       layout="@layout/header_layout" />

<ListView 
        android:id="@+id/list_view"
        android:layout_below="@+id/header_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"/>
 </RelativeLayout>

2 个答案:

答案 0 :(得分:0)

检查一下:

http://developer.android.com/training/improving-layouts/smooth-scrolling.html

这基本上告诉您使用ASyncTask来处理滚动。

答案 1 :(得分:0)

根据你的实现,你总是为每个项目的水平滚动视图充气,无论它是否是一个回收的,所以每次Android需要显示一个项目时,它需要再次重新填充水平滚动视图,这可以解释为什么滚动不顺畅。

您可以尝试将ListView作为项目视图的一部分。如果您的ListViewconvertView == null以及父getView(position, ...) ListView的{​​{1}}被调用,那么此ListView会被夸大一次Adapter {{mList.get(position).getEventList() { 1}}的值为@Override public View getView(final int position, View convertView, ViewGroup parent) { view = convertView; int type = getItemViewType(position); if (view == null) { mHolder = new ViewHolder(); if (type == 0) { mHolder.mainLinearType1 = (LinearLayout) view.findViewById(R.id.main_linear); mHolder.hsv1 = (HorizontalScrollView) view.findViewById(R.id.hsv); mHolder.listView = (ListView) view.findViewById(R.id.frame_view); // assume this is your ListView } if (type == 1) { .... } if (type == 2) { .... } view.setTag(mHolder); } else { mHolder = (ViewHolder) view.getTag(); } if (type==0) { mHolder.mainLinearType1.removeAllViews(); mHolder.listView.setAdapter(new Adapter() { // override adapter with implementation that returns items from mList.get(position).getEventList() }); } } 。由于我们只交换循环视图的数据,我的猜测是它不会影响滚动。

{{1}}