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.xml
- ListView本身布局还是上面那个,只是增加一个条目显示文件
<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的其他写法