2015-01-22 3 views
0

У меня есть вид списка, в котором у меня раздувается 3 разных типа, и один вид этого вида содержит горизонтальный вид прокрутки. В горизонтальном представлении прокрутки у меня есть линейная компоновка, в которой я раздуваю свой собственный xml. Все эти рабочие, но прокрутки списка родительских списков не являются гладкими. Когда я комментирую свой горизонтальный прокрутки, тогда список прокручивается плавно. Ниже мой код:ListView не прокручивается плавно

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

У меня попробовать много, но не в состоянии сделать прокрутку правильно. Я также попробовал просмотр пейджера и горизонтального списка. Но такая же проблема возникает. Пожалуйста, помогите решить эту проблему.

Заранее благодарен.

EDITED

Ниже мой ListView в XML:

<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> 
+0

Google: образец списка ViewHolder в ListView. – Simas

+0

Попробуйте это свойство в listview в xml-файле. android: smoothScrollbar = "true" android: scrollingCache = "false" android: animationCache = "false" – Shane

+0

Я создал класс ViewHolder для своего списка view.when я создаю ViewHolder для горизонтального элемента просмотра прокрутки, а затем добавлю вид в линейную компоновку то он дает ошибку, которую ребенок уже добавлен в view.Please сначала удалите. – Ravi

ответ

0

В соответствии с вашей реализацией вы всегда раздуваете горизонтальное прокрутку для каждого элемента, независимо от того, является ли он переработанным, поэтому каждый раз, когда Android должен отображать элемент, ему необходимо снова заново нанести горизонтальное прокрутку, что может объясните, почему прокрутка не является гладкой.

Вы можете попытаться сделать ListView как часть вида вашего товара. Это ListView будет раздуваться один раз, когда ваш convertView == null, и каждый раз, когда getView(position, ...) родителей ListView называется, вы обновляете товар ListViewAdapter со значениями mList.get(position).getEventList(). Поскольку мы только обмениваем данные переработанного представления, я предполагаю, что это не повлияет на прокрутку.

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

Спасибо за ваш ответ, я не получаю, можете ли вы объяснить, как раздуть адаптер для HorizontalScrollView, из моей строки списка. – Ravi

Смежные вопросы