android之旅6 ListView与BaseAdapter详解
2015-12-25 00:01
495 查看
SQLite补充:分页查询
//"10,10" 第一个10代表下标起始,第二个下标代表查询多少条 db.query("person",null,null,null,null,null,null,"10,10");
ListView相关
ListView在界面上可以显示多少个组件,才会创建多少个组件,自动动态增删数据较多时如果不用ListView,安卓会生成所有对象,导致内存爆掉
在数据一般多时,ListView可以用ScrollView代替,布局和普通组件一样,但实际ListView自带滑动功能
ListView每次在界面上显示会创建条目,屏幕上消失会销毁条目
ListView代码 && 布局
布局就是普通的布局,内部也不用放任何View
<LinearLayout> <ListView android:name="@+id/lv"> </ListView> <LinearLayout
代码块处理过程
public void onCreate(){ ListView lv = findViewById(R.id.lv); //将数据和界面上的View适配,“适配器模式” lv.setAdapter(new BaseAdapter(){ // BaseAdapter为ListAdapter的子类,有两个方法必须实现 //返回总的数据个数,系统调用知道一共要多少数据 public int getCount(){ //return size(); } //所有东西都是View的子类,系统调用显示某个具体的View对象显示在屏幕上,每次返回一个 public View getView(int position, View convertView, ViewGroup parent){ /**position:显示de是第几个条目**/ TextView tv = new TextView(MainActivity.this); tv.setText("text"); return tv; } }); }
ListView显示复杂布局
*复杂布局ListView条目的布局文件*ltem_listView.xmlListView本身布局还是上面那个,只是增加一个条目显示文件
<RelativeLayout android:name="@+id/rl"> <TextView android:name="@+id/tv"> </TextView> <LinearLayout> <TextView/> <TextView/> </LinearLaytou> </RelativeLayout>
代码处理
pubic void onCreate(){ ListView lv = findViewById(R.id.lv); lv.setAdapter(new BaseAdapter(){ public int getCount(){} // ViewGroup的就是五种布局,与View不同的是可以有子元素 //convertView是之前显示的LsitView的缓存 public View getView(int p, View convView, ViewGroup vg){ View v; if (convertView!=null){ //缓存不存在 //布局文件转换成View对象 v = View.inflate(MainActivity.this, R.layout.ltem_listView, null); }else{//必须这么写,不然很容易APP OUT_OF_MEMORY v = convView; } //注意是v.findViewById(R.id.tv); TextView tv_name = (TextView)v.findViewById(R.id.tv); /*业务逻辑: 对组件设置值不能放在if-else内部,必须每次都设置, 原因是系统不会识别第几个条目,如果缓存存在,系统就会 返回该条目,导致数据出错 */ return v; } }); }
View.inflate的其他写法
相关文章推荐
- 关于Android LayoutParams的总结
- Android问题No system images installedForThisTarget
- IconFont_Android的使用和获取
- android 短信拦截器
- android仿IOS7的两种对话框
- Android实战技巧:ViewStub的应用
- Android 数据存储SharedPreferences
- Android项目Tab类型主界面大总结 Fragment+TabPageIndicator+ViewPager
- Android Fragment 真正的完全解析(下)
- Service Android
- Android Fragment 真正的完全解析(上)
- Gradle中AndroidManifest中值的替换与快速渠道打包
- android之旅5 sqlite数据库相关
- Android-Spelling Checker Framework
- Android中Parcelable接口(进行序列化)用法
- broadcast广播-Android
- Android四大组件之Content Provider
- Android编程技巧之随意从当前Activity退出应用
- android解决ScrollView嵌套ListView不能下拉刷新
- android部分控件如何获取到输入的值