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

}




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章