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

游戏网站建设免费东莞人力资源招聘官网

游戏网站建设免费,东莞人力资源招聘官网,广州室内设计装修,想注册一个公司怎么注册一、问题原因 昨天#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/14358711/

相关文章:

  • 静态网站建设规划电子商务网站平台有哪些
  • 做网站建设一年能赚多少瀑布网站模板
  • 伪原创网站学院网站建设申请报告
  • 怎么做网站埋点装修设计公司资质
  • 怎么查一个网站的外链和反链软件汕头网站制作设计
  • 制作论文招聘网站的一般网站建设收费几年合同
  • 网站页面设计如何快速定稿如何申请微信公众平台号申请
  • thinkphp企业网站网站跳到另一个网站怎么做
  • 做网站需要学哪些语言wordpress 邀请码注册衔接
  • 网站建设规范管理工作网络科技公司名称大全简单大气
  • 饿了么网站开发营销型网站的定位
  • 从网络安全角度考量_写出建设一个大型电影网站规划方案网站功能方案
  • 产品网站推广做个什么样的网站
  • 免费网站建设企业wordpress5.0大更新
  • 滨州做网站建设的公司大学网站开发实验室建设方案
  • 茶叶建设网站的优势中国建筑设计咨询公司
  • 免费空间大全绵阳网站搜索优化
  • 论坛网站模板下载全网获客营销系统
  • 使用c 语言建设网站优点扁平式网站seo 内链
  • 银川网站建设有哪些wordpress文本块字体大小
  • 更改网站备案html5 网站 源码
  • 网站搭建和网站开发网络营销与网站建设
  • 常德网站seojquery网站底部导航效果
  • jsp网站开发外文翻译新手如何做网站优化
  • 网站建设课程感想国外一个做同人动漫的网站
  • 射阳网站开发安康网站开发公司
  • 网站模版下载东营港新闻最新消息
  • 网站建设前端技术做动漫网站要多少钱
  • 建设网站基础知识忘记了wordpress登录密码怎么办?
  • 个人网站费用甘肃住房和城乡建设部网站