牛皮,你知道apt是什么东西吗? 编译生成代码那是在开发编译时,打包的时候就已经像正常代码一样在包里了. 关用户那边什么事情? 你不会觉得这些代码是在用户启动应用的时候生成的吧? 你可真懂性能呢 @愿為湘君
Android主流IOC框架浅析作为一名Android程序员,对于上面这种机械化的代码你一定写到想吐了,或许多数时候你只是copy ,paste,然后再改一改,完了你可能又会觉得这种代码毫无营养,写得实在没...
牛皮,你知道apt是什么东西吗? 编译生成代码那是在开发编译时,打包的时候就已经像正常代码一样在包里了. 关用户那边什么事情? 你不会觉得这些代码是在用户启动应用的时候生成的吧? 你可真懂性能呢 @愿為湘君
Android主流IOC框架浅析作为一名Android程序员,对于上面这种机械化的代码你一定写到想吐了,或许多数时候你只是copy ,paste,然后再改一改,完了你可能又会觉得这种代码毫无营养,写得实在没...
👍👍👍
Android启动流程简析(三)接上一篇文章:Android启动流程简析(二) 7. SystemServer启动介绍 SystemServer需要从Zygote fork SystemServer开始分析...
接上一篇文章:Android启动流程简析(二) 7. SystemServer启动介绍 SystemServer需要从Zygote fork SystemServer开始分析...
第二次修改 任何结论在没有经过实际检验之前都不能够确定一定没问题。三年前写的文章回过头来发现有些部分内容是有问题的(PS:这的确比较尴尬),再次对结果进行验证之后重新修改了之...
1. 关于Android dex文件 dex文件作为Android APK的组成部分,其主要是Android的Java代码经过编译生成class文件,再经过dx命令生成的。这...
编译时的性能消耗那是面对开发者的.... 对用户有啥影响啊.... 你不会觉得他新生成的代码会影响性能吧? 别逗了,他也只是findViewById而已,你不用他的,你自己也得写. 有什么区别吗?
Android主流IOC框架浅析作为一名Android程序员,对于上面这种机械化的代码你一定写到想吐了,或许多数时候你只是copy ,paste,然后再改一改,完了你可能又会觉得这种代码毫无营养,写得实在没...
进过测试后,手头的魅族mx5(android5.1)不能设置宽度。
【Android】TabLayout 自定义指示器 Indicator 样式注:使用新的属性需要设置implementation 'com.android.support:design:28.0.0' 在布局里加入 TabLayout,默认是下划线的...
整体思路简单清晰,看了几篇解决方案,有通过反射的,有通过拉源码重写的... 总体来说,在版本支持的情况下,博主这篇文章是实现最简单,且可能出现问题的概率最小的解决方案。
【Android】TabLayout 自定义指示器 Indicator 样式注:使用新的属性需要设置implementation 'com.android.support:design:28.0.0' 在布局里加入 TabLayout,默认是下划线的...
注:使用新的属性需要设置implementation 'com.android.support:design:28.0.0' 在布局里加入 TabLayout,默认是下划线的...
@我是你的东坡肘子 我在使用的时候删除了那个setSelect这个函数,修改了一下选择状态的保存机制, 暂时还没有发现问题。 就以目前需要实现的地址选择来看,你这么写其实思路是非常正确的,因为本身我们设计的范围就是地址选择,所以三级tab够用,针对性的写代码思路简单清晰。 当然,如果要做的是一个通用的多级选择器的话,那就另当别论。
Android仿京东地址选择器貌似图片太大了。。。。 整体思路是TabLayout+ViewPager包裹View然后利用Dialog弹出,再然后就是根据需求添加想要的选择规则blablablabla 源码
请教一下,这里这个setSelect的作用是什么啊? 如果选择器被重新构建,那么这么设置也毫无意义(市级,区县级list会被重新new一个空的出来)。 如果不被重构,那么所有数据都记录在选择器中,界面也不会改变。 可能是我的思想有局限,所以想请教一下这个函数具体是应对那种特殊情况的呢?
Android仿京东地址选择器貌似图片太大了。。。。 整体思路是TabLayout+ViewPager包裹View然后利用Dialog弹出,再然后就是根据需求添加想要的选择规则blablablabla 源码
貌似图片太大了。。。。 整体思路是TabLayout+ViewPager包裹View然后利用Dialog弹出,再然后就是根据需求添加想要的选择规则blablablabla 源码
狒神无敌!
EventBus事件总线的使用今天突然得知有事件总线这个东西,正好又在等后台调接口,就去网上搜罗一个这方面的学习资料学习一下,然后我就震惊了,特么还有这么好的东西,我咋不早点知道,深的我也不知道,...
今天突然得知有事件总线这个东西,正好又在等后台调接口,就去网上搜罗一个这方面的学习资料学习一下,然后我就震惊了,特么还有这么好的东西,我咋不早点知道,深的我也不知道,...
首先感谢博主给出思路
仔细看完博主的代码后,我认为还有些地方可以做小的修改。
首先我认为onScrollStateChanged这个回调函数中,可以不写
if (canLoadMore()) {
// 加载数据
loadData();
}
而是可以增加一个全局变量private boolean mIsLastItem; 并且onScrollStateChanged中改为
if (i == (mListView.getAdapter().getCount() - 1)) {
mIsLastItem = true;
}else {
mIsLastItem = false;
}
然后在dispatchTouchEvent()函数判断事件外部加上一个判断
if (mIsLastItem && !mIsLoad) {事件判断}
这样就保证,每次进入事件判断,都是有意义的,不会出现当前在加载,或者还未到list view的最底部就开始一直的去做touch事件判断和处理。
最后,能够进入到事件判断的话,那么当前是否正在加载,和当前是否已经到底部这两个判断就可以省略了。
然后就是还有一件事有疑问,现在我们假设开始加载有两种情况,第一种,只要向上滑动的距离超过了阈值,就直接开始加载,不管最后手离开屏幕的时候向上滑动的距离是多少,
case MotionEvent.ACTION_MOVE:
// 移动过程中判断时候能下拉加载更多
if (canLoadMore()) {
// 加载数据
loadData();
}
break;
博主的这里符合这种情况。
第二种情况是,不管中间是怎么滑动的,只管最后手离开屏幕的时候的向上滑动的距离是多少,case MotionEvent.ACTION_UP:
// 移动的终点
mUpY = getY();
break;
}
博主的这里是符合第二种情况。
但是这么写,就感觉有点问题了,因为mUpY是最后离开屏幕才记录的,但是离开了屏幕后ACTION_MOVE又进不去了,好像会出现问题。所以我依据第一种情况,判断touch事件做了如下处理
if (mIsLastItem && !mIsLoad) {
switch (ev.getAction()) {
case MotionEvent.ACTION_DOWN:
mStartY = ev.getY();
break;
case MotionEvent.ACTION_MOVE:
mEndY = ev.getY();
if ((mEndY - mStartY) >= SCALED_TOUCH_SLOP) {
loadData();
}
break;
case MotionEvent.ACTION_UP:
break;
}
}
这样符合我开始说的第一种情况。 当然我是刚刚看完,还没有自己仔细的去测试来验证自己的猜想,如果有不对的地方,还请多指证。
SwipeRefreshLayout详解和自定义上拉加载更多个人主页演示Demo下载 本文重点介绍了SwipeRefreshLayout的使用和自定View继承SwipeRefreshLayout添加上拉加载更多的功能。 介绍之前,先...