您的位置:首页 > 移动开发 > Android开发

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.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的其他写法

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: