专栏首页陶士涵的菜地[android] listview入门

[android] listview入门

Listview组件非常重要,4分之一的时间都是在搞这个,还是通过上一节的数据库,写个for循环,插入50条数据。

先使用笨方法显示数据,根布局LinearLayout 定义一个id,在activity里面获取这个id。

获取PersonDao对象,调用dao对象的查询全部的方法,得到一个list集合的数据。

遍历这个集合,遍历中调用person实体类对象的toString()方法,得到一条记录的字符串。

遍历中实例化TextView对象,调用TextView对象的setText()方法,把一条信息放进去。

调用LinearLayout对象的addView(child)方法,child参数就是子view对象

笨方法代码:

        LinearLayout lv=(LinearLayout) findViewById(R.id.lv);
        PersonDao dao=new PersonDao(this);
        List<Person> persons=dao.select();
        for(Person person:persons){
            TextView tv=new TextView(this);
            tv.setText(person.toString());
            lv.addView(tv);
        }

此时屏幕高度不够,超出去的信息会直接隐藏,系统给提供了一个组件叫ScrollView可以上下滚动,包裹一下LinearLayout,此时会提示命名空间那里错误,把命名空间放在SorollView里,指定宽度和高度都是填充父窗体

当数据量比较大时,这样直接new出无数对象很消耗资源,应该是在滑动过程中动态new出组件对象,超出视线就销毁掉,这个时候引入了新的控件ListView

获取ListView对象,通过findViewById()方法,调用ListView对象的setAdapter(adapter)方法设置数据绑定到ListView,参数是一个ListAdapter接口类型,我们要实现这个接口,把实现类对象传进去,定义一个私有的内部类实现ListAdapter,这时会要求实现几十个方法,太多了,系统为我们提供了一个实现类BaseAdapter,默认的实现类大部分都是以BaseXxx,SimpleXxx,DefaultXxx开头

BaseAdapter是一个抽象类,要实现他的抽象方法,内部类继承BaseAdapter实现以下方法

getCount(),返回int数据的条数,把我的数据集合定义成成员属性,调用List集合size()方法

getItem(),

getItemId()

getView(position,) 控制索引位置的View对象,position是当前集合的索引,

在这个方法中,我们可以实例化TextView对象,需要传入上下文对象,使用getApplicationContext()获取上下文,调用TextView对象的setText(),数据是List集合调用get()方法,传入索引position获得,返回那个TV对象。在这个方法中Log.i()打印日志可以看到只会生成视线范围内的View对象。

activity代码:

package com.tsh.database;

import java.util.List;

import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ListView;
import android.widget.TextView;

import com.tsh.database.dao.PersonDao;
import com.tsh.database.domain.Person;

public class MainActivity extends Activity {
    private List<Person> persons;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        ListView lv=(ListView) findViewById(R.id.mylist);
        PersonDao dao=new PersonDao(this);
        persons=dao.select();
        lv.setAdapter(new MyAdapter());
    }
    private class MyAdapter extends BaseAdapter{

        @Override
        public int getCount() {
            // TODO Auto-generated method stub
            return persons.size();
        }

        @Override
        public Object getItem(int position) {
            // TODO Auto-generated method stub
            return null;
        }

        @Override
        public long getItemId(int position) {
            // TODO Auto-generated method stub
            return 0;
        }

        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
            Log.i("MainActivity", "生成对象"+position);
            TextView tv=new TextView(getApplicationContext());
            Person person=persons.get(position);
            tv.setText(person.toString());
            return tv;
        }
        
    }
}

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • [android] 手机卫士欢迎页检测更新

    最新版本的下载地址:http://xxxxxxxx/mobilesafe2.0.apk

    陶士涵
  • [android] 加载大图片到内存

    默认情况下,android程序分配的堆内存大小是16,虚拟机上面的VM Heep就是设置它的

    陶士涵
  • [android] 短信的备份

    /data/data/com.android.providers.telephony/databases/mmssms.db

    陶士涵
  • 基于Shiro,JWT实现微信小程序登录完整例子

    小程序官方流程图如下,官方地址 : https://developers.weixin.qq.com/miniprogram/dev/framework/ope...

    EalenXie
  • mall整合SpringSecurity和JWT实现认证和授权(一)

    https://github.com/macrozheng/mall-learning/tree/master/mall-tiny-04

    macrozheng
  • 接口测试笔记(一)

    https://developers.douban.com/wiki/?title=user_v2 

    free赖权华
  • elasticSearch学习(七)

    崔笑颜
  • Spring-boot 配置Aop获取controller里的request中的参数以及其返回值

    在spring boot里面一切配置都是很简单的,下面为我所有被请求到的controller加上Aop的功能吧,看码:

    林老师带你学编程
  • JDBC能否处理Blob和Clob?

    Blob是指二进制大对象(Binary Large Object),而Clob是指大字符对象(Character Large Objec),因此其中Blob是为...

    唐怀瑟
  • [译] 延迟加载 React Components (用 react.lazy 和 suspense)

    虽然在 React 16.8.1 中终于面世的 hooks 引人瞩目,但在去年发布的 16.6.0 版本里也包含了一个吸引人的新特性,可以让我们在不依赖第三方库...

    江米小枣

扫码关注云+社区

领取腾讯云代金券