当前位置: 首页 > 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.dnsts.com.cn/news/216864.html

相关文章:

  • 信用 网站 建设方案河北廊坊建设局网站
  • 自己做网站想更换网址网站建设费用 多少钱
  • 网页设计的交流网站左旗网站建设公司
  • 如何用vps做网站一键建站模板
  • 给公司建立一个网站吗page和wordpress
  • 上海做网站及推广哪些做调查问卷挣钱的网站
  • 电商网站开发的项目描述公司网页制作设计
  • 崇礼做网站的公司衡水做网站找谁
  • seo整站优化网站建设网站建设广告管理
  • 在线视频网站开发先进的网站开发技术
  • 宝安专业网站设计公司主机屋网站
  • 永久个人自助建站为你做的网站
  • 如何选择一个优质网站建设公司前程无忧招聘网
  • 中国免费域名申请网站西安工作室
  • 高端网站定制建设公司哪家好网站建设张世勇
  • 淘客软件自动做网站?衡水网站建设公司哪家比较好
  • 网站制作器流浪猫狗救助网站开发设计
  • 上海电商网站建设公司石家庄pc端网站开发
  • html网站欣赏企业网站软件
  • 把别人的图片拿来做网站城乡建设网站
  • 本地建站软件手机怎样用网站做成软件
  • 怎么做网站的图片跳转女生做ui设计
  • 新手如何做企业网站微信公众号如何创建视频链接
  • 网站分类 维护网站开发应注意哪些问题
  • 遵义市建设厅网站网站设计的资质叫什么
  • 湖南奉天建设集团网站如何制作简易个人网站
  • 网站怎么做优化阿里巴巴网站建设公司
  • 手机网站做seophp网站开发示例代码
  • 国内专业网站制作公司网站建设方案书备案设计图
  • 游戏网站cms当牛做吗网站源代码分享