Android Scroll 中嵌套ListView

Android Scroll 中嵌套ListView



public class ExpListView extends ListView{


    public ExpTwoWayView(Context context) {
    super(context);
    }

    public ExpTwoWayView(Context context, AttributeSet attrs) {
    super(context, attrs);
    }


    在Scroll中嵌套ListView,一般会出现了、ListView的item只显示一个的情况,出现这种情况,如果想让ListView显示正常,一种方法是设置ListView

    的高度,比如300dp,另一种方法就是重写ListView的onMeasure方法,如下。但是重写该方法也有问题。就是写成这样,会将ListView的所有Item都显示出来,

   如果ListView 有10个Item,那就显示十行,如果有1000个item,那就显示1000行,整个界面完全变形了。同时重写了这个方法,ListView就不会有滚动效果了。每次

   滑动屏幕的时候,滚动的是外面的Scroll。如果想在滑动屏幕的时候,我滑动ListView,Scroll不滑动,那就要重写ListView  的onInterceptTouchEvent和onTouchEvent方法。

   如下所示,同时把onMeasure方法注释掉。

    @Override
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {

    int expandSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2,
        MeasureSpec.AT_MOST);
    super.onMeasure(expandSpec, heightMeasureSpec);
    }




   写成这样的话,在滑动ListView的时候,外面的Scroll就不会滑动了。但是也有一个问题,就是当ListView滑动到开始或者末尾的时候,在滑动ListView, Scroll

   仍然接受不到滑动事件。只有滑动Scroll的时候,Scroll才会有相应。呵呵,非常高深的一个问题。。。。。。

    @Override
    public boolean onInterceptTouchEvent(MotionEvent ev) {
    boolean ret = super.onInterceptTouchEvent(ev);

    Log.i("----->", " onInterceptTouchEvent ret = " + ret);
    if (ret) {
        getParent().requestDisallowInterceptTouchEvent(true);
    }
    return ret;
    }

    @Override
    public boolean onTouchEvent(MotionEvent ev) {
    boolean ret = super.onTouchEvent(ev);

    Log.i("----->", " onTouchEvent ret = " + ret);
    if (ret) {
        getParent().requestDisallowInterceptTouchEvent(true);
    }
    return ret;
    }

}




你可能感兴趣的:(android进阶,Android,Scroll嵌套List)