簡體   English   中英

ListView不能平滑滾動

[英]ListView not scroll smoothly

我有一個列表視圖,其中有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>

檢查一下:

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

這基本上告訴您使用ASyncTask來處理滾動。

根據您的實現,您始終會為每個項目擴大水平滾動視圖,無論它是否是可回收的項目,因此Android每次需要顯示一個項目時,都需要再次重新擴大水平滾動視圖,這可以解釋為什么滾動不順利。

您可以嘗試將ListView作為項目視圖的一部分。 當您的convertView == null ,此ListView將被充氣一次,並且每次調用父ListView getView(position, ...) ,您將使用mList.get(position).getEventList()值刷新項目的ListView Adapter 由於我們僅交換回收視圖的數據,因此我猜測這不會對滾動產生太大影響。

@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()
      });
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM