Android开发ViewPager中ListView失效问题解决方法
时间: 2024-03-14 07:19:19 浏览: 82
Android应用源码之ViewPager中嵌套ListView实现了下拉刷新和上拉更多,解决了冲突的问题。.zip
在ViewPager中嵌套ListView时,可能会遇到ListView无法滑动的问题,这是因为ViewPager会拦截ListView的滑动事件。解决方法如下:
1. 自定义ListView,重写其onInterceptTouchEvent()方法,返回false,让ViewPager不拦截ListView的滑动事件。
```
public class MyListView extends ListView {
public MyListView(Context context) {
super(context);
}
public MyListView(Context context, AttributeSet attrs) {
super(context, attrs);
}
public MyListView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}
@Override
public boolean onInterceptTouchEvent(MotionEvent ev) {
final int action = ev.getAction();
switch (action) {
case MotionEvent.ACTION_DOWN:
setParentScrollAble(false);
break;
case MotionEvent.ACTION_UP:
setParentScrollAble(true);
break;
}
return super.onInterceptTouchEvent(ev);
}
private void setParentScrollAble(boolean flag) {
getParent().requestDisallowInterceptTouchEvent(!flag);
}
}
```
2. 在ViewPager的适配器中,将ListView所在的布局设置为android:descendantFocusability="blocksDescendants",防止ListView获取焦点而导致ViewPager无法滑动。
```
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:descendantFocusability="blocksDescendants">
<com.example.MyListView
android:id="@+id/listView"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
</LinearLayout>
```
以上两种方法都可以解决ViewPager中ListView失效的问题。
阅读全文