如何将listview添加到viewpager中
2个回答
2018-08-02 · 做真实的自己 用良心做教育
千锋教育
千锋教育专注HTML5大前端、JavaEE、Python、人工智能、UI&UE、云计算、全栈软件测试、大数据、物联网+嵌入式、Unity游戏开发、网络安全、互联网营销、Go语言等培训教育。
向TA提问
关注
展开全部
ViewPager嵌套,需要在子ViewPager里重写onTouchEvent事件并且调用
getParent().requestDisallowInterceptTouchEvent(true);
// 通知其父控件,现在进行的是本控件的操作,不允许拦截
getParent().requestDisallowInterceptTouchEvent(true);
// 通知其父控件,现在进行的是本控件的操作,不允许拦截
展开全部
1.listView中第一项为viewPager,其他项为单独包含两种数据类型,导致listView布局混乱。
2.viewPager与listView的滑动冲突
3.viewPager的监听器在viewPager切换的时候,进入了onPageChang方法但界面上没有显示相应的页码刷新。
针对问题1,查资料后发现当listView中的item类型超过一项时,需要重载方法
[java] view plain copy
@Override
public int getViewTypeCount() {
return 2;
@Override
public int getItemViewType(int position) {
return position > 0 ? 0 : 1;
针对问题2,上网搜索后发现了两种解决办法:
(1)重写listView
[java] view plain copy
public class MyListView extends ListView {
private GestureDetector mGestureDetector;
View.OnTouchListener mGestureListener;
public MyListView(Context context) {
super(context);
}
public MyListView(Context context, AttributeSet attrs) {
super(context, attrs);
mGestureDetector = new GestureDetector(new YScrollDetector());
setFadingEdgeLength(0);
}
public MyListView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}
@Override
public boolean onInterceptTouchEvent(MotionEvent ev) {
return super.onInterceptTouchEvent(ev) && mGestureDetector.onTouchEvent(ev);
}
class YScrollDetector extends SimpleOnGestureListener {
@Override
public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) {
if(distanceY!=0&&distanceX!=0){
}
if(Math.abs(distanceY) >= Math.abs(distanceX)) {
return true;
}
return false;
}
}
}
(2)重写ViewPager
[java] view plain copy
public class MyViewPager extends ViewPager {
public MyViewPager(Context context) {
super(context);
}
public MyViewPager(Context context, AttributeSet attrs) {
super(context, attrs);
}
@Override
public boolean dispatchTouchEvent(MotionEvent ev) {
getParent().requestDisallowInterceptTouchEvent(true);//这句话的作用 告诉父view,我的单击事件我自行处理,不要阻碍我。
return super.dispatchTouchEvent(ev);
}
}
上面两种方法可以解决listView和ViewPager的滑动问题,注意需要固定ViewPager的高度,才能在listView中完整的显示出来。
针对问题3
发现我把viewPager的监听器写在了listView的getView中,导致多次加载监听器,出现监听器不管用的问题。把OnPageChangeListener监听器放在初始化的时候就可以正常刷新了。
2.viewPager与listView的滑动冲突
3.viewPager的监听器在viewPager切换的时候,进入了onPageChang方法但界面上没有显示相应的页码刷新。
针对问题1,查资料后发现当listView中的item类型超过一项时,需要重载方法
[java] view plain copy
@Override
public int getViewTypeCount() {
return 2;
@Override
public int getItemViewType(int position) {
return position > 0 ? 0 : 1;
针对问题2,上网搜索后发现了两种解决办法:
(1)重写listView
[java] view plain copy
public class MyListView extends ListView {
private GestureDetector mGestureDetector;
View.OnTouchListener mGestureListener;
public MyListView(Context context) {
super(context);
}
public MyListView(Context context, AttributeSet attrs) {
super(context, attrs);
mGestureDetector = new GestureDetector(new YScrollDetector());
setFadingEdgeLength(0);
}
public MyListView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}
@Override
public boolean onInterceptTouchEvent(MotionEvent ev) {
return super.onInterceptTouchEvent(ev) && mGestureDetector.onTouchEvent(ev);
}
class YScrollDetector extends SimpleOnGestureListener {
@Override
public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) {
if(distanceY!=0&&distanceX!=0){
}
if(Math.abs(distanceY) >= Math.abs(distanceX)) {
return true;
}
return false;
}
}
}
(2)重写ViewPager
[java] view plain copy
public class MyViewPager extends ViewPager {
public MyViewPager(Context context) {
super(context);
}
public MyViewPager(Context context, AttributeSet attrs) {
super(context, attrs);
}
@Override
public boolean dispatchTouchEvent(MotionEvent ev) {
getParent().requestDisallowInterceptTouchEvent(true);//这句话的作用 告诉父view,我的单击事件我自行处理,不要阻碍我。
return super.dispatchTouchEvent(ev);
}
}
上面两种方法可以解决listView和ViewPager的滑动问题,注意需要固定ViewPager的高度,才能在listView中完整的显示出来。
针对问题3
发现我把viewPager的监听器写在了listView的getView中,导致多次加载监听器,出现监听器不管用的问题。把OnPageChangeListener监听器放在初始化的时候就可以正常刷新了。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询