按照C语言语法, 0 表示假,非零(常常用 1)表示真,那是否函数也用 0 返回值表示“失败”,1 返回值表示“成功”呢?...“行业潜规则” C语言函数当然可以使用返回值 0 表示“失败”,用返回值 1 表示“成功”。...当然,我们也可以说“实数要么是 1,要么非 1”,不过这显然也不是“行业潜规则”。...例如我们可以规定,如果 myopen() 函数因为“文件或者目录不存在”的原因失败,返回 -1,如果因为“权限不够”的原因失败,则返回 -2。...-1 和 -2 都是“非零值”,而成功作为失败的对立面,也即“非零值”的对立面,myopen() 函数使用返回值 0 表示成功无可厚非。
首先你要确定几点 1: 你数据表的ID 是不是 设置了自增?如果没有,那么一切都是徒劳 2: 必须的几个属性你添加了么?...) keyProperty="id" 3: keyProperty 这个设置的是 你传入对象的属性名,不是你数据表的字段 如果以上情况都满足,那么你很有可能犯了一个和我一样的错误 网上大部分教程在写...insert对象并返回自增主键的 demo 的时候,都是直接传入对象,而没有用@Param注解 其实他们的区别在这里 keyProperty="id" 如果你不用 @Param注解 ,那么你在 #{...xxx}里写的是 对象的属性 如果你使用 @Param注解,那么相当于你给参数对象 命名了,那么你在#{xxx}里写的就是 命名参数.属性 但是你忘了 keyProperty="" 同样要使用这种写法
当ListView处于顶部时,如果继续向下拖动,就拦截触摸事件,将触摸事件传递给ViewDragHelper处理,这里比较关键,主要是是否拦截触摸事件的判断条件要处理好,否则如果ListView的点击和滚动事件被我们拦截了...第三步:在ViewDragHelper的拖动回调方法里面,设置listView和彩虹LoadingView的位置,调用requestLayout。...第四步:手势松开后,开始刷新,LoadingView在固定位置做旋转动画。 第五步:如果设置了onRefreshListener,执行onRefresh接口。...rainbowStartTop = -120; //圆形加载指示器的半径 private int rainbowRadius = 100; private int rainbowTop = - 120; //圆形加载指示器旋转的角度...stopRefresh时滚动到初始位置的位移动画。
需要注意的是当你的滚动内容较小,不到当前ListView的3个屏幕高度时则不会出现这个快速滚动滑块,同时该方法仍然是AbsListView的基础方法,可以在ListView或GridView等子类中使用快速滚动辅助...*ActiveViews是在布局开始时出现在屏幕上的视图。通过构造,它们显示当前信息。 *在布局的最后,ActiveViews中的所有视图都被降级为ScrapViews。...这个数组在布局开始时填充, *在布局的末尾,mActiveViews中的所有视图都被移动到mScrapViews *mActiveViews表示一个连续的视图范围,第一个视图的位置存储在..., 在第一次“心跳”performTraversals()函数中,我们会对ListView进行预测量、最终测量 2次测量,onMeasure()方法被调用两次,1次布局 onLayout()方法调用1次...Layout时,ListView内还没有数据,数据还在Adapter那,这里childCount=0 */ final int childCount = getChildCount
一、简介 前段时间需要一个旋转木马效果用于展示图片,于是第一时间在github上找了一圈,找了一个还不错的控件,但是使用起来有点麻烦,始终觉得很不爽,所以寻思着自己做一个轮子。...RecyclerView是google官方在support.v7中提供的一个控件,是ListView和GridView的升级版。...第二个方法:在layoutItem()中 调用了父类方法layoutDecorated对Item进行布局,其中mOffsetAll为整个旋转控件的滑动偏移量。...当dx>0时,控件向右滚动,即时,控件向左滚动,即--> 接着,调用先前已经写好的布局方法layoutItems(),对Item进行重新布局。 最后,返回实际滑动的距离。...最后将计算出来的顺序优先级返回给RecyclerView进行绘制。 总结 以上,通过旋转画廊控件,我们过了一遍自定义LayoutManager的流程。
今天在使用数据库的时候,遇到一个场景,即在插入数据完成后需要返回此数据对应的自增主键id,但是在使用Mybatis中的generatedKey且确认各项配置均正确无误的情况下,每次插入成功后,返回的都是...1,而不是最新的自增Id。...终于凭借着一次Debugg发现的问题,原来在使用Mabatis中的insert或者insertSelective方式插入时,如使用int insert(TestGenKey testGenKey)时,返回值...int表示的是插入操作受影响的行数,而不是指的自增长id,那么返回的自增id到底去哪里了呢?...DTD MyBatis Generator Configuration 1.0//EN" "http://mybatis.org/dtd/mybatis-generator-config_1_
解决的问题有两个: 1)实现水平滑动的ListView。...() - 1); if (child !...() - 1); } } private void positionItems(final int dx) { if (getChildCount...android.view.View; import android.widget.ScrollView; /** * 重写ScrollView,以解决ScrollView与水平listView...滑动时冲突 */ public class MyScrollView extends ScrollView { private GestureDetector mGestureDetector
另外ListView还有一个非常神奇的功能,我相信大家应该都体验过,即使在ListView中加载非常非常多的数据,比如达到成百上千条甚至更多,ListView都不会发生OOM或者崩溃,而且随着我们手指滑动来浏览更多数据时...,ListView和GridView在工作原理和实现上都是有很多共同点的。...那么每执行一次while循环,pos的值都会加1,并且nextTop也会增加,当nextTop大于等于end时,也就是子元素已经超出当前屏幕了,或者pos大于等于mItemCount时,也就是所有Adapter...那么我们平时写ListView的Adapter时,getView()方法通常会怎么写呢?...那么到目前为止,我们就把ListView的整个工作流程代码基本分析结束了,文章比较长,希望大家可以理解清楚,下篇文章中会讲解我们平时使用ListView时遇到的问题,敬请期待。
那么每执行一次while循环,pos的值都会加1,并且nextTop也会增加,当nextTop大于等于end时,也就是子元素已经超出当前屏幕了,或者pos大于等于mItemCount时,也就是所有Adapter...那么我们平时写ListView的Adapter时,getView()方法通常会怎么写呢?...那么每执行一次while循环,pos的值都会加1,并且nextTop也会增加,当nextTop大于等于end时,也就是子元素已经超出当前屏幕了,或者pos大于等于mItemCount时,也就是所有Adapter...那么我们平时写ListView的Adapter时,getView()方法通常会怎么写呢?...那么到目前为止,我们就把ListView的整个工作流程代码基本分析结束了,文章比较长,希望大家可以理解清楚,下篇文章中会讲解我们平时使用ListView时遇到的问题,敬请期待。
另外ListView还有一个非常神奇的功能,我相信大家应该都体验过,即使在ListView中加载非常非常多的数据,比如达到成百上千条甚至更多,ListView都不会发生OOM或者崩溃,而且随着我们手指滑动来浏览更多数据时...,ListView和GridView在工作原理和实现上都是有很多共同点的。...那么每执行一次while循环,pos的值都会加1,并且nextTop也会增加,当nextTop大于等于end时,也就是子元素已经超出当前屏幕了,或者pos大于等于mItemCount时,也就是所有Adapter...)方法会返回一个null。...那么我们平时写ListView的Adapter时,getView()方法通常会怎么写呢?
注意这里除了firstTop和lastBottom之外,我们还计算了一个endBottom的值,这个值记录最底部的元素位置,用于在滑动时做边界检查的。...getColumnToAppend()方法是用于判断当ListView向下滑动时,新进入屏幕的子View应该添加到哪一列的。...getColumnToPrepend()方法是用于判断当ListView向上滑动时,新进入屏幕的子View应该添加到哪一列的。...值得一题的是,这个功能扩展对于调用方而言是完全不透明的,也就是说在使用瀑布流ListView的时候其实仍然在使用标准的ListView用法,但是自动就变成了这种瀑布流的显示模式,而不用做任何特殊的代码适配...好的,那么今天就到这里了,ListView系列的内容也到此结束,相信大家通过这三篇文章的学习,对ListView一定都有了更深一层的理解,使用ListView时碰到了什么问题也可以更多从源码和工作原理的层次去考虑如何解决
添加依赖 在build.gradle中添加: dependencies { ......androidTestCompile 'com.android.support.test.uiautomator:uiautomator-v18:2.1.1' } 检测设备上的UI 在进行测试时,我们需要根据控件属性来定位...boolean isNaturalOrientation() 检测是否处于默认旋转状态 void getDisplayRotation() 返回当前旋转状态,0、1、、2、3分别代表0、90、180、...okButton.click(); } UiObject appItem = new UiObject(new UiSelector() .className("android.widget.ListView...示例 UiScrollable settingsItem = new UiScrollable(new UiSelector() .className("android.widget.ListView
:有多少子控件就内存中创建多少子控件),另一方面,对ItemView缓存,以便滑动时复用 既然ListView是自定义组件,我们首先找到它的Measure方法 protected void onMeasure...,ListView只能显示一个item的原因,另外如果ListView的高度设置是wrap_content时,将调用measureHeightOfChildren方法,并且第三个参数是NO_POSITION...isScrap = mIsScrap; for (i = startPosition; i <= endPosition; ++i) { //调用了obtainView返回一个...的复用机制一部分(回收池),我们再看onLayout方法,在ListView中并没有发现,在父类AbsListView中发现了 protected void onLayout(boolean changed...() - 1); return selectedView; } 其中nextTop ListView只加载在屏幕上的item,我们再来到makeAndAddView
虽然在Android5.X中,RecyclerView在很多地方组件取代了ListView,但是ListView的使用依然是分广泛。 本博文将对以下两方面的内容进行介绍 1....使用ViewHolder模式提高效率 ViewHolder模式充分利用了ListView的视图缓存机制,避免了每次在getView()时重复的调用findViewById()....隐藏ListView的滚动条 3.隐藏ListView的滚动条 默认的ListView在滚动时,在右边会显示滚动条,指定当前滚定的位置。...true-不活动时隐藏,活动时显示 listView.setVerticalScrollBarEnabled(false); // 或者在...设置ListView需要显示在第几行 ListView以Item为单位进行显示,默认显示第一个Item,当需要指定具体的Item时,可以通过如下代码来实现 ListView.setSelection(N
多个Listview瀑布流效果 效果展示 原理解释 自定义MyLinearLayout,继承至LinearLayout,在布局文件中,将3个listview放置在MyLinearLayout中。...重写MyLinearLayout中的onInterceptTouchEvent方法,返回true,打断向listview传递的触摸事件。...* 现在我希望当我在屏幕中间上方拖动时,整个屏幕的子view一起向上拖动, * 这是就需要在满足条件时,中断该touch事件,交给MyLinearLayout这个父...super(context, attrs); // TODO Auto-generated constructor stub } @Override // 返回...(ev); } @Override public boolean onTouchEvent(MotionEvent event) { int count = getChildCount
这个自定义控件是用来展示底层view的,当顶层的view滑动到底层view的中间时,顶层view会自动滚动到底层view的顶部或者底部,顶层view可以是scrollview,listview等...(getChildAt(1) instanceof ViewGroup)) { throw new IllegalStateException("top view should...be contained by a viewgroup"); } mTopView = (ViewGroup) getChildAt(1); } @Override...private boolean isViewAtTop(View view) { if (view instanceof AbsListView) {//这里可以自己更改代码,判断listview...等在什么情况下为拉到顶部,默认为第一个item可见的时候 final AbsListView absListView = (AbsListView) view;
就像题目上说的,今天在写一个例子代码时遇到了这个问题,下面是当时驱动层和应用层的代码: #include #define BASE_CODE 0x800 #define CREATE_THREAD_COMMAND...这段代码当时主要是有两个问题,第一个就是CreateFile打开时错误,并返回错误码1,乍看好像没有什么问题,其实这个问题我估计还是自己对应用层如何调用驱动层不太熟。...应用层针对不同设备对象下发的请求通过I/O管理器进行封装,变为一个个的IRP,根据不同的设备对象所属的驱动程序的不同,系统会自动调用我们事先准备好的处理程序,在程序中主要做这样几件事: 1....决定如何向I/O管理器和本层驱动程序返回值 I/O管理器会根据返回的值来决定如何给上层返回一个值,就拿CreateFile来说,这个API在调用时会经过I/O管理器生成一个IRP_MJ_CREATE...最后来总结下: 1. 如果我们要打开对应的驱动中的设备对象,在驱动层需要提供IRP_MJ_CREATE的处理函数,将返回给I/O管理器的值填入到IRP的IoStatus这个结构中。
我有一个带有记录器的@bean,该记录器返回它从JIRA API获得的JSON数据。我当前正在记录启动程序时的响应。...现在我想开始在我的控制器中使用@getmapping,并想在localhost:8080/上执行GET请求时记录信息。...Story’, created= ‘2020-11-18T09:16:55.816+0000’}}] 我尝试将CommandLineRunner上的@bean更改为@getmapping,但当我这么做时,...INFO 36704 — [nio-8080-exec-2] o.s.web.servlet.DispatcherServlet : Completed initialization in 0 ms 在localhost
集合中的元素排序无效 ; 打印之后没有进行排序 ; 错误代码就不贴出来了 , 随便搜索的代码 , 一用就出错 ; Java 1.7 及以上的版本中 , Comparator 接口 compare 方法的返回值必须是一对相反的数值..., 如 -1 和 +1 ; 不能返回 1 和 0 ; 二、解决方案 ---- Comparator 接口 正确的使用方法 : list.sort(new Comparator...// 升序排序 if (o1.age > o2.age) { return 1; } else {...list.sort(new Comparator() { @Override public int compare(Student o1,...1; } else { return -1; } } }
ViewGroup是否拦截事件,是通过onTnterceptTouchEvent返回值来确定,当返回true时,表示拦截该事件,那么该系列事件全部传递给ViewGroup的onTouchEvent,如果返回...一开始的思路是切换tab页面的话其他tab页面Listview控件可见状态会不可见或者消失,完全不是这么回事,后来发现其实View的视图状态一直是可见的,不过那时候技术老大提醒说点击不同的tab时listview...测试页面布局: image.png 第二个tab中的listview的(x,y)坐标 image.png 第三个tab中的listview(x,y)坐标 image.png 后面通过Hierarchy...= null) { for (int i = 0, j = group.getChildCount(); i < j; i++) { View child...group.getChildAt(i); if (child instanceof ScrollView) { //获取view在整个屏幕中的坐标如果
领取专属 10元无门槛券
手把手带您无忧上云