Android - ListView

1.  Listview的入门 
 listview是一个垂直滚动的列表.   可以展示一些条目 每个条目长得都查不多.
 代码实现过程 
 1.在布局中声明listview
 
  
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
  3. xmlns:tools="http://schemas.android.com/tools"
  4. android:id="@+id/activity_main"
  5. android:layout_width="match_parent"
  6. android:layout_height="match_parent"
  7. tools:context="itheima.day05.MainActivity">
  8. <ListView
  9. android:id="@+id/lv"
  10. android:layout_width="match_parent"
  11. android:layout_height="match_parent"></ListView>
  12. </RelativeLayout>
2.listview里面展示的是一个条目一个条目的内容 每个条目的内容来自listAdapter 由于listAdapter默认实现地方法特别多,所以我们找到了listadapter的实现类---->baseAdapter,所以定义一个类继承BaseAdapter就可以了
 
  
  1. class MyAdapter extends BaseAdapter {
  2. //listview一共需要展示多少个条目
  3. @Override
  4. public int getCount() {
  5. return 100;
  6. }
  7. //根据position(索引)可以找到对应的条目
  8. @Override
  9. public Object getItem(int position) {
  10. return null;
  11. }
  12. //根据position找到对应条目的id值
  13. @Override
  14. public long getItemId(int position) {
  15. return 0;
  16. }
  17. //获取一个view 负责每个条目具体展示的内容
  18. @Override
  19. public View getView(int position, View convertView, ViewGroup parent) {
  20. TextView textView = new TextView(MainActivity.this);
  21. textView.setTextSize(24);
  22. textView.setText("传智播客");
  23. return textView;
  24. }
  25. }
3.listview和适配器关联
 
  
  1. lv.setAdapter(new MyAdapter());
2.listview优化  
 
 
  1. @Override
  2. public View getView(int position, View convertView, ViewGroup parent) {
  3. ///1.判断一下converview
  4. TextView textView ;
  5. if (convertView == null){
  6. textView = new TextView(MainActivity.this);
  7. System.out.println("创建新的view对象:"+textView);
  8. }else{
  9. //说明这个对象不为空
  10. textView = (TextView) convertView;
  11. System.out.println("复用旧的对象:"+textView);
  12. }
  13. textView.setTextSize(22);
  14. textView.setText("传智播客"+position);
  15. return textView;
  16. }
  17. }

3.复杂listview效果制作 
  1.把要展示的listview效果通过布局做出来
 
 
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
  3. android:layout_width="match_parent"
  4. android:layout_height="match_parent">
  5. <ImageView
  6. android:id="@+id/iv_icon"
  7. android:layout_width="100dp"
  8. android:layout_height="100dp"
  9. android:src="@drawable/bg"
  10. />
  11. <TextView
  12. android:id="@+id/tv_title"
  13. android:layout_width="match_parent"
  14. android:layout_height="wrap_content"
  15. android:text="今日头条"
  16. android:textSize="30sp"
  17. android:textColor="#000000"
  18. android:layout_marginLeft="5dp"
  19. android:layout_marginTop="5dp"
  20. android:layout_toRightOf="@id/iv_icon"
  21. />
  22. <TextView
  23. android:id="@+id/tv_desc"
  24. android:layout_width="match_parent"
  25. android:layout_height="wrap_content"
  26. android:text="今日头条老师老师过来过时了阿拉嘎嘎嘎"
  27. android:textSize="20sp"
  28. android:textColor="#999999"
  29. android:layout_marginLeft="5dp"
  30. android:layout_marginTop="5dp"
  31. android:layout_toRightOf="@id/iv_icon"
  32. android:layout_below="@id/tv_title"
  33. />
  34. </RelativeLayout>

2.通过View类提供的打气筒服务把一个布局转换为View
 
 
  1. View view = View.inflate(MainActivity.this, R.layout.item, null);

4.获取打气筒服务常见写法
  1.通过View类提供的一个静态方法获取打气筒服务
 
 
  1. view = View.inflate(MainActivity.this, R.layout.item, null);
  2.通过布局填充器类获取打气筒服务
 
 
  1. view = LayoutInflater.from(MainActivity.this).inflate(R.layout.item,null);
 3.通过getsystemservice方法获取打气筒服务
 
 
  1. LayoutInflater layoutInflater = (LayoutInflater) getSystemService(LAYOUT_INFLATER_SERVICE);
  2. view = layoutInflater.inflate(R.layout.item,null);
5.综合小案例(把数据库真实数据通过listview展示数据)
  代码实现步骤
  5.1先声明listview
 
 
  1. <ListView
  2. android:id="@+id/lv"
  3. android:layout_width="match_parent"
  4. android:layout_height="match_parent"></ListView>
  5.2 当点击查询按钮的时候 把数据封装到集合 
 
 
  1. {
  2. //1. 第一次是创建数据库 第二次调用就是打开数据库
  3. SQLiteDatabase db = myOpenHelper.getWritableDatabase();
  4. //2.执行一个插入的sql语句 当执行查询sql语句的时候不能使用execSQL方法 因为这个方法返回值是void
  5. // Cursor cursor = db.rawQuery("select * from info", null); id name phone
  6. /**
  7. * 参数1:表名
  8. * 参数2 :代表要查询的列 new String[]{"id","name","phone"} null什么也不写就不知道要查什么 默认查所有
  9. * 参数3:查询条件 没有查询条件 ?
  10. * 参数4: 对条件占位
  11. * 参数5:group by 分组 不分组
  12. * 参数6:having null
  13. */
  14. Cursor cursor = db.query("info", null, null, null, null, null, null, null);
  15. //3.移动光标把数据取出来
  16. if (cursor!=null){
  17. while (cursor.moveToNext()){
  18. //4.取出对应列的值 列的索引 从0开始
  19. // int id = cursor.getInt(0);
  20. String id = cursor.getString(0);
  21. String name = cursor.getString(1);
  22. String phone = cursor.getString(2);
  23. //5.创建一个bean对象 用来存查询信息
  24. Person person = new Person();
  25. person.setName(name);
  26. person.setPhone(phone);
  27. //6.把person对象加入到list集合
  28. lists.add(person);
  29. }
  30. //7.listview和适配器关联
  31. lv.setAdapter(new MyAdapter());
  32. }
  33. //3.当db对象用完后 需要关闭
  34. db.close();
  35. }
 5.3创建listview适配器对象
 
 
  1. //定义listview的适配器
  2. class MyAdapter extends BaseAdapter{
  3. //展示listview一共有几个条目 应该是查询出来几个数据就展示几个
  4. @Override
  5. public int getCount() {
  6. return lists.size();
  7. }
  8. @Override
  9. public Object getItem(int position) {
  10. return null;
  11. }
  12. @Override
  13. public long getItemId(int position) {
  14. return 0;
  15. }
  16. //获取一个view 用来展示每个条目的内容 1.手动创建一个view 2.通过打气筒把一个布局转换为一个view对象
  17. @Override
  18. public View getView(int position, View convertView, ViewGroup parent){
  19. //1.取集合里面取数据
  20. Person person = lists.get(position);
  21. //2.通过打气筒把item转换为一个view对象
  22. View view ;
  23. if (convertView == null){
  24. view = View.inflate(MainActivity2.this,R.layout.item,null);
  25. }else{
  26. view = convertView;
  27. }
  28. //3.把集合里面的数据展示出来 先到控件 眼睛看见的不一定真实的.神偷 报这个错的原因不赖你们 懒谷歌
  29. TextView tv_name = (TextView) view.findViewById(R.id.tv_name);
  30. TextView tv_phone = (TextView) view.findViewById(R.id.tv_phone);
  31. //4.更新数据 说明textview为空
  32. tv_name.setText(person.getName());
  33. tv_phone.setText(person.getPhone());
  34. return view;
  35. }
  36. }

6.ArrayAdapter的使用
   不管什么adapter 功能都是一样的.功能就是adapter负责把数据展示到listview上
   arrayAdapter的使用
 
 
  1. String objects[] = {"android","java","c","html","servler","jsp"};
  2. @Override
  3. protected void onCreate(Bundle savedInstanceState) {
  4. super.onCreate(savedInstanceState);
  5. setContentView(R.layout.activity_main);
  6. //1.找到lv
  7. ListView lv = (ListView) findViewById(R.id.lv);
  8. //2.给lv设置数据适配器 参数2:布局资源---->条目的布局资源--->到底画成什么样 看listview具体要展示什么数据.
  9. //参数3:条目里面的控件的id
  10. lv.setAdapter(new ArrayAdapter<String>(this,R.layout.item,R.id.tv,objects));
  11. // lv.setAdapter(new SimpleAdapter());
  12. // lv.setAdapter(new MyAdapter());
  13. }

 
  
 


   


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值