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方法註釋掉。
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纔會有相應。呵呵,非常高深的一個問題。。。。。。
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;
}
}