安卓基础之ListView
来源:互联网 发布:淘宝电子面单打印教程 编辑:程序博客网 时间:2024/06/05 16:42
ListView
特点:1、屏幕一次性能显示多少就只能一次性初始化多少,节约内存;2、可以通过convertView来复用创建的对象视图,保持创建的对象是一定的;3、ListView 自带ScrollView 的功能,可以实现界面滚动4、ListView 控件的设计遵循MVC 设计模式
入门案例
1、布局控件:RelativeLayout
2、查找控件,设置控制器。这里可以实现接口或者继承类,因为接口里的方法太多,所以我们一般使用继承类,继承BaseAdapter里面有四种方法。
- getCount() 控制listview里面有多少个item
- getView(int position, View convertView, ViewGroup parent) 返回某个位置显示的view对象。
- getItem(int position) 获取item的对象
- getItemId(int position) 获取item的id
优化
上诉的步骤只是最简单的显示出来了一个listview以及里面展示的数据,但是如果我们要显示的数据有一万条,那么在快速往上滚动的过程中就会不断的调用adapter中的getView方法,不断的生成新的Textview控件,消耗内存资源,最后导致内存不足,造成oom内存溢出。
ListView复用的原理
当我们滑动listview的时候,每当一个item看不见的时候,那么那个item就可以被复用起来了,也就是成为了convertView,那个时候convertView就不为null了所谓的复用,其实本质是就是item的view对象没有真正的被垃圾回收器回收掉,而是重新将身上的数据给换掉了,看起来好像是出现了一个新的item而已
对ListView 进行优化的最简单有效的措施就是复用getView 方法中的convertView 对象。
优化后的代码:
public View getView(int position, View convertView, ViewGroup parent) {TextView tv = null;if (null == convertView) { //如果缓存中没有数据则需要创建一个新的TextView tv = new TextView(MainActivity.this);}else{ //如果缓存中有数据则直接强转即可 tv = (TextView) convertView; } tv.setText("我是文本:" + position); tv.setTextSize(24); return tv;}
打气筒 inflate
当我们listview的item条目需要显示比较复杂的布局时,这个时候如果还用代码的方式去实现就不是很方便了,所以android给我们提供了一个方便的API,View对象本身或者任何继承View对象的控件都有一个方法我们把它形象的比喻为打气筒,可以将一个布局文件打气打成一个View对象,方便我们使用。布局里面的所有控件都可以通过这个View对象来进行查找
有三种方式将一个布局文件转化为Veiw对象
1系统控件View自带有inflate方法 view = View.inflate(MainActivity.this, R.layout.item, null);2获取LayoutInflater 对象,然后调用inflate 方法 LayoutInflater layoutInflater = LayoutInflater.from(MainActivity.this); view = layoutInflater.inflate(R.layout.item, null);3先通过上下文提供的getSystemService 方法获取LayoutInfater 对象。然后调用inflate 方法LayoutInflater layoutInflater2 = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE); view = layoutInflater2.inflate(R.layout.item, null);
ListView 的常见适配器
- ArrayAdapter
- lv.setAdapter(new ArrayAdapter< T >(context, resource, objects));
- context上下文 resource布局文件的id objects要显示的数据,使用list集合或者数组都行
- SimpleAdapter
- impleAdapter 可以实现比ArrayAdapter 复杂一点的布局。使用SimpleAdapter 的数据一般都是HashMap构成的List,List 的每一个对象对应ListView 的每一行。HashMap 的每个键值数据映射到布局文件中对应id 的组件上。因为系统没有对应的布局文件可用,我们可以自己定义一个布局文件。
对话框
对话框的初始化
AlertDialog.Builder builder = new Builder(当前Activity的上下文);
对话框设置属性
builder.setTitle(title);-->设置标题builder.setMessage(msg);-->设置提醒信息
设置对话框按钮
builder.setPositiveButton(按钮文字,new DialogInterface.OnClickListener());-->最右边的按钮builder.setNegativeButton(按钮文字,new DialogInterface.OnClickListener());-->最左边的按钮builder.setNeutralButton(按钮文字,new DialogInterface.OnClickListener());-->中间的按钮
对话框显示
builder.show();
对话框样式
setSingleChoiceItems()-->单选setMultiChoiceItems()-->多选ProgressDialog -->进度条
Android下的帧动画
帧动画:就是由一张一张的图片按照顺序和时间进行一帧一帧的播放。帧动画使用的步骤:1.创建帧动画每帧需要的图片, 放到对应的 drawable-xxx 或drawable 目录中2.在drawable 目录下,创建帧动画 xml 文件,根节点选择 animation-list帧动画的自动执行:oneshot 如果为true,表示动画只播放一次停止在最后一帧上,如果设置为false表示动画循环播放。3. 设置为 View 的 Background 或者 ImageView 的 src,然后获取到控件的 AnimationDrawable 对象,通过 AnimationDrawable.start() 方法启动动画:ImageView iv = (ImageView) findViewById(R.id.iv);iv.setBackgroundResource(R.drawable.logo);AnimationDrawable anim = (AnimationDrawable) iv.getBackground();anim.start();//开始播放动画
Android国际化
文字国际化
在res文件下创建values--xx文件夹,在里面创建strings.xml文件,在里面写对应的语言
图片国际化
drawable-xxx里面的资源名字要起一样的,这样系统就能根据当前的语言自动去寻找对应的文件夹资源
样式和主题
配置样式:
在style文件里设置,如果想继承系统自带的主题或者样式,指定 parent=“需要继承的样式”;如果需要修改继承样式里的某一样,在自定义样式里面重写需要修改的属性即可。目的是为了达到复用,代码的简洁,统一修改的便捷。
设置主题:
可以通过设置theme属性参数来修改整个应用程序或者单个界面的主题风格:在清单文件里面配置 theme="@style:..."指定style为AppTheme则整个应用程序的主题风格即为AppTheme的风格,当然也可以修改AppTheme的风格,将当前主题添加一个没有标题栏的风格,或者自己定义一个theme;也可以在代码中设置主题,在代码设置 setTheme(ResId) 此方法必须在setContentView之前调用。
0 0
- 安卓基础之ListView
- 安卓控件之ListView
- 安卓开发之ListView
- 安卓开发学习心得-------ListView基础
- 安卓基础3:数据库和ListView
- 安卓UI组件之ListView详解
- 安卓入门学习之ListView
- 2015.5.13安卓笔记之listview
- 安卓开发之ListView优化方案
- 安卓布局之ListView学习笔记
- 安卓开发之listView优化篇
- 安卓基础之基础知识
- 安卓画图基础之基础
- 安卓基础:ListView的简单使用和优化
- 4.安卓基础——数据存储&ListView
- 自学安卓复习基础_之九(使用适配器ArrayAdapter<T>来实现listView的CRD)
- 自学安卓复习基础_之十(使用适配器BaseAdapter来实现listView的CRD)
- 安卓LISTVIEW
- 全名k歌导出已发布的音乐方法
- 自定义注解并映射生成sql
- A、B两张表 获取过滤条件后A表中除了B表中剩余的数据
- system命令
- webview调用js注意事项
- 安卓基础之ListView
- 18个Java开源CMS系统一览
- 深入理解java虚拟机-读书笔记8-线程安全与锁优化
- Nexus 6 系统编译
- Android对接微信SDK 续二
- Android 从0开始自定义控件之 ViewRoot 与 DecorView (五)
- 南邮微机实验(设计定时器)
- UGUI控件之按钮的监听事件系统
- SpringMVC前后端传值方式