ScollerView 内嵌套 ListView

package com.bluedragonfly.widget;

import android.content.Context;
import android.util.AttributeSet;
import android.view.View.MeasureSpec;
import android.widget.GridView;
import android.widget.ListView;

public class InnerScrollListView extends ListView{

	 public InnerScrollListView(Context context, AttributeSet attrs) {
	        super(context, attrs);
	    }
	 
	    public InnerScrollListView(Context context) {
	        super(context);
	    }
	 
	    public InnerScrollListView(Context context, AttributeSet attrs, int defStyle) {
	        super(context, attrs, defStyle);
	    }

	
	@Override
	protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
		int expandSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2,
                MeasureSpec.AT_MOST);
        super.onMeasure(widthMeasureSpec, expandSpec);
	}

}

  重写ListView

然后在布局文件中

<ScrollView
        android:layout_width="match_parent"
        android:layout_height="match_parent" 
        android:fillViewport="true"
        >

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="vertical"
            android:focusable="true"
           android:focusableInTouchMode="true" >
    
            <InnerScrollListView/>
    
        </LinearLayout>    

  

 android:fillViewport="true"

android:focusable="true"
android:focusableInTouchMode="true"这三个属性是必需的,否者会出现ScollerView会自动往下滑动一段距离


使用这个方法多日,纵然是解决内嵌问题,可是新的问题又来
1.如果你的内嵌内嵌节目是个fragment 需要和其他界面来回切换 会发现内嵌界面会自动下滑一段距离,如果想让他回到顶部可用scrollTo,但不能掩耳盗铃忽视问题所在
2.还是以上条件下,来回切换你还发现切换速度很慢很卡,这是因为内嵌导致适配器切换一次刷新一次,不停的去getView,自然就慢,这样就严重影响体验
故建议还是使用Listview添加header和foot来完成想要的效果
posted on 2014-10-28 16:26  冲锋的路上的兵  阅读(818)  评论(0编辑  收藏  举报