我有一个列表视图,其中我有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>
答案 0 :(得分:0)
检查一下:
http://developer.android.com/training/improving-layouts/smooth-scrolling.html
这基本上告诉您使用ASyncTask来处理滚动。
答案 1 :(得分:0)
根据你的实现,你总是为每个项目的水平滚动视图充气,无论它是否是一个回收的,所以每次Android需要显示一个项目时,它需要再次重新填充水平滚动视图,这可以解释为什么滚动不顺畅。
您可以尝试将ListView
作为项目视图的一部分。如果您的ListView
被convertView == 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}}