UI的设计,适配器,以及RecyclerView无法加载的解决办法
这本书里讲到的界面设计都是用最基本的方式实现的,即编写xml文件
所有的控件都具有宽度和高度属性,即android:layout_width和android:layout_height,这两个属性对应的值有三个,分别为wrap_content和match_parent和fill_parent,后两个的意义相同,都表示和父类控件的属性相同,前面那个则表示控件刚好包好里面的内容,即内容决定控件大小.
常用控件
TextView,是最简单的一种控件,用于界面上显示一些信息
Button,顾名思义,表示按钮,属性与TextView基本相同,可以利用textAllCaps来对按钮上的字的字母大小写进行设置
EditText,用于输入和编辑内容,比如QQ发信息,是用户交互中一个很重要的控件,重要属性:maxlines,通过他来限制输入的最大行数,防止不断被拉长
ImageView,展示图片的控件,图片通常放在drawable目录当中,属性跟前面大致相同
ProgressBar,在界面上展示一个进度条,用来表示程序加载进度,可以通过android:visibility来控制其可见性,有visible,invisible,gone三个值
AlertDialog,用于弹出对话框,并且这个框可以屏蔽屏幕上各个控件的交互能力,一般用于提示警告信息
ProcessDialog,跟上面AlertDialog类似,都是弹出对话框并屏蔽其他控件,不同的是它显示的是进度条
自定义控件
自定义控件其实也就是重写一个类,继承已有的类,然后再继续编写,这样就能减少重复的代码,这里着重
要说的应该是适配器的使用,这里是镶嵌在ListView里面讲的,为什么讲ListView要说适配器.ListView
是用来展示大量数据的,但是例如一个数组,里面的数据是不能直接传递给ListView我们需要借助适配器来完成
我简单理解为一个盒子,这样我们就可以将东西装在盒子里面然后装上货车,而不是把东西直接放上货车
ListView性能优化,ListView很难用的原因之一就是它有很多地方可以优化,就例如在这个方法中
这里每次调用这个函数的时候,不管他里面有没有元素,都会讲布局重新加载一遍,这样,当布局的数量逐渐多起来
并且快速滑动的时候,时间复杂度也会跟着上来,所以这里还有优化的空间,而切入点就从加载布局这里下手,我们设置
一个判断条件,如果调用这个函数的时候,convertView这个外部变量里面没有元素,则加载布局,否则不加载,这样就在
一定程度上提高了性能
书中还讲到的一个优化的地方便是建一个缓存了,用来存放加载完成的控件的实例,放在我们自己
定义的ViewHolder类里面,这样在convertView不为空的时候,通过getTag取出,避免每次都用
findViewById()来找布局了
最后说一说
RecyclerView
不详细讲用法什么的了,讲一讲需要注意的地方,之前做那个聊天界面的时候,我的程序程序总是只能显示输入框,然而却没
没有出来信息,我找遍了整个程序,好吧再强的大脑也不能媲美编译器,最后缴械投降,我再自定义布局的函数里都加了一句Log.d("#####","####"),来看着部分代码有没有执行,类似这样
点一下按钮就看一下日志,最后发现是onCreateVieHolder那个函数压根没有调用,最后各种找教程我找到了几个原因
onCreateViewHolder没有加载有以下四种可能
1,没有用layoutManager
2,没有用scrollView嵌套RecyclerView,这个其实问题不大,但听网上大牛说在某些版本里面不嵌套不行
3,getItemCount这个函数返回非正数,返回负数和0是不能显示出的
4,最外层的LinearLayout的属性里没有设置orientation,并且要定为"vertical",这样才能加载出来
UI的设计,适配器,以及RecyclerView无法加载的解决办法的更多相关文章
- WordPress博客网站fonts.useso加载慢解决办法
WordPress博客网站fonts.useso加载慢解决办法 之前WordPress博客因为google字体库访问不了替换成360的useso,最近WordPress博客网站一直等待fonts.us ...
- django在关闭debug后,admin界面 及静态文件无法加载的解决办法
当debug为true的时候,ALLOWED_HOSTS是跳过不管用的.所以这里需要将debug关掉,令debug=false,ALLOWED_HOSTS=[ '*' ]表示所有的主机都可以访问 开启 ...
- 关于thinkphp3.1无法加载模块解决办法
关于thinkphp3.1无法加载模块解决办法 如果没有具体的哪个模块的名字 请注意PHP的版本问题
- Eclipse 插件安装方法和插件加载失败解决办法
一:是利用Eclipse Software Update 添加网址,让Eclipse 自动的搜索下载最新的插件. 比如安装VE这个可视化编辑UI的插件,其步骤为 Help > Software ...
- netload 加载程序集抛异常----无法加载程序集解决办法
netload 加载程序集抛异常----无法加载程序集 错误信息如下: 无法加载程序集.错误详细信息: System.BadImageFormatException: 未能加载文件或程序集“file: ...
- thinkphp无法加载模块解决办法
前台入口文件index.php <?php //前台入口 define('THINKPHP_PATH', '../ThinkPHP/');//底层的位置 define('APP_PATH', ' ...
- VirtualBox 下USB 设备加载的步骤及无法加载的解决办法
1. 将u盘插入电脑,在windows能够识别后,进入VirtualBox的选定要加载的虚拟机,选择设置——>选择usb设备项 2. 选择右边的第一或者是第二个图标,增加一个新的筛选器,第一个图 ...
- Django项目关闭debug模式后,静态文件无法加载的解决办法
开启内置服务器,由于项目中local_settings.py文件中的DEBUG=True,进行开发和调试一直没什么问题. 但是现在需要编写404,500等出错页面,在debug模式下出了错都会出现报错 ...
- vs2015 web项目加载失败解决办法
1.问题 ---------------------------Microsoft Visual Studio---------------------------Web 应用程序项目 XXWeb 已 ...
随机推荐
- springboot 增加过滤器方法
在访问服务器时,我们需要控制用户是否允许权限,这个时候可以使用过滤器. 在springboot 配置过滤器的方法如下: 编写过滤器代码: package com.neo.filter; import ...
- greenplum 开启和关闭服务
1.关闭服务$pg_ctl stop -m fast -D $MASTER_DATA_DIRECTORY (/usr/local/greenplum-db/bin) 2.开启服务 $pg_ctl st ...
- winform 可拖动无边框窗体解决办法
方法一:通过重载消息处理实现. 鼠标的拖动只对窗体本身有效,不能在窗体上的控件区域点击拖动 /// <summary> /// 通过重载消息处理实现.重写窗口过程(WndProc),处理一 ...
- ArcGIS的地理坐标系与大地坐标系
一直以来,总有很多朋友针对地理坐标系.大地坐标系这两个概念吃不透.近日,在网上看到一篇文章介绍它们,非常喜欢.所以在此转发一下,希望能够对制图的朋友们有所帮助. 地理坐标:为球面坐标. 参考平面地是 ...
- winSocket编程(一)WSAStartup
/******************************************************************** 更新日期:2017-11-07 10:33:08* 进度:完 ...
- 笔记 Bioinformatics Algorithms Chapter1
Chapter1 WHERE IN THE GENOME DOES DNA REPLICATION BEGIN 一. ·聚合酶启动结构域会结合上游序列的一些位点,这些位点有多个,且特异,并且分布 ...
- 723 if while for
if == 如果 程序结构分为三种 顺序结构 程序按照从上往下的顺序依次执行 分支结构 程序根据某种条件选择要执行的代码 循环结构 可以使代码重复的结构 需求如果温度高于30就开空调 while fo ...
- 74(2B)Shortest Path (hdu 5636) (Floyd)
Shortest Path Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Others)T ...
- EL表达式总结
EL表达式是在JSP中使用的 EL表达式的作用:简化jsp文件中的<% %>. [EL的概述] 什么是EL: 为什么学习EL: * 简化JSP的代码,而且减少<%%> 使用EL ...
- 6、GNU makefile工程管理学习的一个例子
在之前我们已经学习了一个文件的编译过程,但是做过项目的都知道,一个工程中的源文件不计其数,其按类型.功能.模块会分别放在若干个目录中,而这些文件如何编译就需要有一个编译规则,虽然现在很多大型的项目都是 ...