1. Listview的入门
listview是一个垂直滚动的列表. 可以展示一些条目 每个条目长得都查不多.
代码实现过程
1.在布局中声明listview
<?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:id="@+id/activity_main"android:layout_width="match_parent"android:layout_height="match_parent"tools:context="itheima.day05.MainActivity"><ListViewandroid:id="@+id/lv"android:layout_width="match_parent"android:layout_height="match_parent"></ListView></RelativeLayout>
2.listview里面展示的是一个条目一个条目的内容 每个条目的内容来自listAdapter 由于listAdapter默认实现地方法特别多,所以我们找到了listadapter的实现类---->baseAdapter,所以定义一个类继承BaseAdapter就可以了
class MyAdapter extends BaseAdapter {//listview一共需要展示多少个条目@Overridepublic int getCount() {return 100;}//根据position(索引)可以找到对应的条目@Overridepublic Object getItem(int position) {return null;}//根据position找到对应条目的id值@Overridepublic long getItemId(int position) {return 0;}//获取一个view 负责每个条目具体展示的内容@Overridepublic View getView(int position, View convertView, ViewGroup parent) {TextView textView = new TextView(MainActivity.this);textView.setTextSize(24);textView.setText("传智播客");return textView;}}
3.listview和适配器关联
lv.setAdapter(new MyAdapter());
2.listview优化
@Overridepublic View getView(int position, View convertView, ViewGroup parent) {///1.判断一下converviewTextView textView ;if (convertView == null){textView = new TextView(MainActivity.this);System.out.println("创建新的view对象:"+textView);}else{//说明这个对象不为空textView = (TextView) convertView;System.out.println("复用旧的对象:"+textView);}textView.setTextSize(22);textView.setText("传智播客"+position);return textView;}}
3.复杂listview效果制作
1.把要展示的listview效果通过布局做出来
<?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"><ImageViewandroid:id="@+id/iv_icon"android:layout_width="100dp"android:layout_height="100dp"android:src="@drawable/bg"/><TextViewandroid:id="@+id/tv_title"android:layout_width="match_parent"android:layout_height="wrap_content"android:text="今日头条"android:textSize="30sp"android:textColor="#000000"android:layout_marginLeft="5dp"android:layout_marginTop="5dp"android:layout_toRightOf="@id/iv_icon"/><TextViewandroid:id="@+id/tv_desc"android:layout_width="match_parent"android:layout_height="wrap_content"android:text="今日头条老师老师过来过时了阿拉嘎嘎嘎"android:textSize="20sp"android:textColor="#999999"android:layout_marginLeft="5dp"android:layout_marginTop="5dp"android:layout_toRightOf="@id/iv_icon"android:layout_below="@id/tv_title"/></RelativeLayout>
2.通过View类提供的打气筒服务把一个布局转换为View
View view = View.inflate(MainActivity.this, R.layout.item, null);
4.获取打气筒服务常见写法
1.通过View类提供的一个静态方法获取打气筒服务
view = View.inflate(MainActivity.this, R.layout.item, null);
2.通过布局填充器类获取打气筒服务
view = LayoutInflater.from(MainActivity.this).inflate(R.layout.item,null);
3.通过getsystemservice方法获取打气筒服务
LayoutInflater layoutInflater = (LayoutInflater) getSystemService(LAYOUT_INFLATER_SERVICE);view = layoutInflater.inflate(R.layout.item,null);
5.综合小案例(把数据库真实数据通过listview展示数据)
代码实现步骤
5.1先声明listview
<ListViewandroid:id="@+id/lv"android:layout_width="match_parent"android:layout_height="match_parent"></ListView>
5.2 当点击查询按钮的时候 把数据封装到集合
{//1. 第一次是创建数据库 第二次调用就是打开数据库SQLiteDatabase db = myOpenHelper.getWritableDatabase();//2.执行一个插入的sql语句 当执行查询sql语句的时候不能使用execSQL方法 因为这个方法返回值是void// Cursor cursor = db.rawQuery("select * from info", null); id name phone/*** 参数1:表名* 参数2 :代表要查询的列 new String[]{"id","name","phone"} null什么也不写就不知道要查什么 默认查所有* 参数3:查询条件 没有查询条件 ?* 参数4: 对条件占位* 参数5:group by 分组 不分组* 参数6:having null*/Cursor cursor = db.query("info", null, null, null, null, null, null, null);//3.移动光标把数据取出来if (cursor!=null){while (cursor.moveToNext()){//4.取出对应列的值 列的索引 从0开始// int id = cursor.getInt(0);String id = cursor.getString(0);String name = cursor.getString(1);String phone = cursor.getString(2);//5.创建一个bean对象 用来存查询信息Person person = new Person();person.setName(name);person.setPhone(phone);//6.把person对象加入到list集合lists.add(person);}//7.listview和适配器关联lv.setAdapter(new MyAdapter());}//3.当db对象用完后 需要关闭db.close();}
5.3创建listview适配器对象
//定义listview的适配器class MyAdapter extends BaseAdapter{//展示listview一共有几个条目 应该是查询出来几个数据就展示几个@Overridepublic int getCount() {return lists.size();}@Overridepublic Object getItem(int position) {return null;}@Overridepublic long getItemId(int position) {return 0;}//获取一个view 用来展示每个条目的内容 1.手动创建一个view 2.通过打气筒把一个布局转换为一个view对象@Overridepublic View getView(int position, View convertView, ViewGroup parent){//1.取集合里面取数据Person person = lists.get(position);//2.通过打气筒把item转换为一个view对象View view ;if (convertView == null){view = View.inflate(MainActivity2.this,R.layout.item,null);}else{view = convertView;}//3.把集合里面的数据展示出来 先到控件 眼睛看见的不一定真实的.神偷 报这个错的原因不赖你们 懒谷歌TextView tv_name = (TextView) view.findViewById(R.id.tv_name);TextView tv_phone = (TextView) view.findViewById(R.id.tv_phone);//4.更新数据 说明textview为空tv_name.setText(person.getName());tv_phone.setText(person.getPhone());return view;}}
6.ArrayAdapter的使用
不管什么adapter 功能都是一样的.功能就是adapter负责把数据展示到listview上
arrayAdapter的使用
String objects[] = {"android","java","c","html","servler","jsp"};@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);//1.找到lvListView lv = (ListView) findViewById(R.id.lv);//2.给lv设置数据适配器 参数2:布局资源---->条目的布局资源--->到底画成什么样 看listview具体要展示什么数据.//参数3:条目里面的控件的idlv.setAdapter(new ArrayAdapter<String>(this,R.layout.item,R.id.tv,objects));// lv.setAdapter(new SimpleAdapter());// lv.setAdapter(new MyAdapter());}
本文详细介绍ListView的基本用法及优化技巧,包括ListView的初始化、适配器的编写、视图复用等,并通过综合案例展示了如何结合数据库操作实现动态数据加载。
2504

被折叠的 条评论
为什么被折叠?



