android之旅6 ListView与BaseAdapter详解

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的其他写法
    这里写图片描述
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值