listview

来源:互联网 发布:accp和java 编辑:程序博客网 时间:2024/06/14 07:10

1. Listview的入门

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"><ListView        android: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一共需要展示多少个条目        @Override        public int getCount() {            return 100;        }​        //根据position(索引)可以找到对应的条目        @Override        public Object getItem(int position) {            return null;        }​        //根据position找到对应条目的id值        @Override        public long getItemId(int position) {            return 0;        }​        //获取一个view 负责每个条目具体展示的内容        @Override        public 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());

代码实现过程
1.在布局中声明listview
2.listview优化

 @Override        public View getView(int position, View convertView, ViewGroup parent) {​           ///1.判断一下converview            TextView 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"><ImageView        android:id="@+id/iv_icon"        android:layout_width="100dp"        android:layout_height="100dp"        android:src="@drawable/bg"        /><TextView        android: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"        /><TextView        android: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

<ListView        android: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一共有几个条目  应该是查询出来几个数据就展示几个        @Override        public int getCount() {            return lists.size();        }​        @Override        public Object getItem(int position) {            return null;        }​        @Override        public long getItemId(int position) {            return 0;        }​        //获取一个view 用来展示每个条目的内容 1.手动创建一个view 2.通过打气筒把一个布局转换为一个view对象        @Override        public 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"};​    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);​        //1.找到lv        ListView lv = (ListView) findViewById(R.id.lv);        //2.给lv设置数据适配器  参数2:布局资源---->条目的布局资源--->到底画成什么样 看listview具体要展示什么数据.        //参数3:条目里面的控件的id        lv.setAdapter(new ArrayAdapter<String>(this,R.layout.item,R.id.tv,objects));​//        lv.setAdapter(new SimpleAdapter());//        lv.setAdapter(new MyAdapter());    }
原创粉丝点击