当前位置: 首页 > news >正文

游戏网站建设免费wordpress柒比貳

游戏网站建设免费,wordpress柒比貳,cpc引流做网站cpa推广,网站建设服务哪家好一、问题原因 昨天#xff0c;突然一个问题丢在了我的头上#xff0c;用户反馈说某某界面下拉刷新不好使啊#xff0c;怎么回事。二话不说直接运行项目#xff0c;经过测试#xff0c;发现果然不好使。一看代码提交日期好家伙2020年#xff0c;百思不得其解#xff0c;…一、问题原因 昨天突然一个问题丢在了我的头上用户反馈说某某界面下拉刷新不好使啊怎么回事。二话不说直接运行项目经过测试发现果然不好使。一看代码提交日期好家伙2020年百思不得其解为啥20年的下拉刷新不好使到现在才反馈。 还是看问题原因吧。 看了下下拉刷新框架是PullToRefreshView好像没有用过这个框架经过测试发现下拉手势怎么都不能回调到刷新回调 只能断点调试了。 有几个方向可以试探下。 ViewPager拦截我们的触摸事件了导致触摸事件没有下发到我们的listView中没有正确注册刷新回调接口ListView本身没有处理好下拉事件 以上都是几个猜想方向我们一一验证。 我们就直接注册ListView触摸事件回调就可以验证上述猜想。经过验证发现以上猜想都错了。那么问题是出在哪呢。 跟着代码一步一步走下去就能发现原因了。 二、问题分析 经过调试最终定位到PullToRefreshBase这个类中。在这个类的onInterceptTouchEvent方法中找到了处理手势的逻辑。 public final boolean onInterceptTouchEvent(MotionEvent event) {if (!isPullToRefreshEnabled()) {return false;}final int action event.getAction();if (action MotionEvent.ACTION_CANCEL || action MotionEvent.ACTION_UP) {mIsBeingDragged false;return false;}if (action ! MotionEvent.ACTION_DOWN mIsBeingDragged) {return true;}switch (action) {case MotionEvent.ACTION_MOVE: {// If were refreshing, and the flag is set. Eat all MOVE eventsif (!mScrollingWhileRefreshingEnabled isRefreshing()) {return true;}if (isReadyForPull()) {final float y event.getY(), x event.getX();final float diff, oppositeDiff, absDiff;// We need to use the correct values, based on scroll// directionswitch (getPullToRefreshScrollDirection()) {case HORIZONTAL:diff x - mLastMotionX;oppositeDiff y - mLastMotionY;break;case VERTICAL:default:diff y - mLastMotionY;oppositeDiff x - mLastMotionX;break;}absDiff Math.abs(diff);if (absDiff mTouchSlop (!mFilterTouchEvents || absDiff Math.abs(oppositeDiff))) {if (mMode.showHeaderLoadingLayout() diff 1f isReadyForPullStart()) {mLastMotionY y;mLastMotionX x;mIsBeingDragged true;if (mMode Mode.BOTH) {mCurrentMode Mode.PULL_FROM_START;}} else if (mMode.showFooterLoadingLayout() diff -1f isReadyForPullEnd()) {mLastMotionY y;mLastMotionX x;mIsBeingDragged true;if (mMode Mode.BOTH) {mCurrentMode Mode.PULL_FROM_END;}}}}break;}case MotionEvent.ACTION_DOWN: {if (isReadyForPull()) {mLastMotionY mInitialMotionY event.getY();mLastMotionX mInitialMotionX event.getX();mIsBeingDragged false;}break;}}return mIsBeingDragged;}到这里就很简单了给每一个判断都打上断点一步步走。最后发现mIsBeingDragged这个值为false。这就导致在onTouchEvent中并不会执行我们的刷新逻辑。 switch (event.getAction()) {//...省略部分代码case MotionEvent.ACTION_MOVE: {if (mIsBeingDragged) {mLastMotionY event.getY();mLastMotionX event.getX();//处理刷新和加载事件pullEvent();return true;}break;}case MotionEvent.ACTION_DOWN: {if (isReadyForPull()) {mLastMotionY mInitialMotionY event.getY();mLastMotionX mInitialMotionX event.getX();return true;}break;}//...省略部分代码 }可以看到在move事件中并不会执行我们刷新逻辑。 到这里就可以明白肯定是在onInterceptTouchEvent中部分逻辑判断失败了导致mIsBeingDragged值为false。 重新回到上一个逻辑中就可以发现isReadyForPullStart()方法返回值为false就无法执行到mIsBeingDragged赋值为true的逻辑。 最终会执行到isFirstItemVisible()中一起来看看吧。 private boolean isFirstItemVisible() {final Adapter adapter mRefreshableView.getAdapter();if (null adapter || adapter.isEmpty()) {if (DEBUG) {Log.d(LOG_TAG, isFirstItemVisible. Empty View.);}return true;} else {/*** This check should really just be:* mRefreshableView.getFirstVisiblePosition() 0, but PtRListView* internally use a HeaderView which messes the positions up. For* now well just add one to account for it and rely on the inner* condition which checks getTop().*/if (mRefreshableView.getFirstVisiblePosition() 1) {final View firstVisibleChild mRefreshableView.getChildAt(0);if (firstVisibleChild ! null) {return firstVisibleChild.getTop() mRefreshableView.getTop();}}}return false;}最后就是看这句代码return firstVisibleChild.getTop() mRefreshableView.getTop();在debug下计算这段就会发现firstVisibleChild.getTop()的值为0而mRefreshableView.getTop()的值为30什么情况呢。 再去看源码会发现mRefreshableView其实就是我们的ListView。那么这里判断的就是第一个item距离上边界的距离和ListView距离上边界的距离。 那么这里我们就要去找找为什么ListView的距离要比item的距离大。 在项目中找到了如下代码没想到简简单单的一句代码影响这么大。 lp.setMargins(0, ViewUtil.dip2px(mActivity, 10), 0, 0); mListview.setLayoutParams(lp);注释这段设置margin的代码转为在上一个控件设置margin或者在item中设置margin。不能下拉刷新就完美解决了泰裤辣
http://www.hkea.cn/news/14490080/

相关文章:

  • 宜昌网站排名优化中英文切换网站模板
  • 中英网站建立微信营销策划方案范文
  • 做一个网站需要哪些wordpress下拉框插件
  • 泗县住房和城乡建设局网站网页游戏开服表1区
  • 代刷网站系统怎么做网站显示建设中页面
  • 石家庄网站建设备案小学校园网站建设方案工作职责
  • 租用服务器做视频网站模仿wordpress
  • 高端的平面设计网站centos架设wordpress
  • 打开一个不良网站提示创建成功江宁区建设工程局网站
  • 音乐网站手机模板优化网站链接的方法
  • internet网站建设试卷dw个人主页制作代码
  • 网站建设 环讯传媒木马网站链接有什么
  • 燃烧学课程网站建设深圳比较好的网站建设公司
  • 前段模板的网站网站首页logo怎么修改
  • 网站地图对seo做网站的好处和坏处
  • 大连地区网站建设网站建设可行性研究
  • 常州自助建站seo南京振高建设有限公司官方网站
  • 做社区网站用什么程序好哈尔滨发布信息的网站
  • 网站外链是什么意思wordpress分类目录和标签的作用
  • 计划书网站推广的目录怎么做只做原创内容平台网站
  • 百度广告优化师影响seo排名的因素有哪些
  • 网站建设公司运营模式字体设计软件免费
  • 下载站源码cms火车头 wordpress 4.3
  • 高端网站建设找哪个公司可口可乐公司建设网站的目的是什么意思
  • wordpress怎么更改语言设置大连网站seo
  • 南昌网站建设兼职三亚 网站建设
  • 7款优秀网站设计欣赏wordpress用途
  • wordpress如何从网站登录后台电子商务网站开发实践
  • 开办 网站建设费 科目wordpress翻页图片效果
  • 百度站长工具怎么关闭教程视频手机上怎么安装wordpress