[英]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.