listview展示数据库数据
ListView相关代码书写流程
① 在布局文件中 声明一个listview节点
② 在activity中 通过findViewByid 找到listview控件
③ 写一个类继承BaseAdapter 实现四个方法
④ getView方法
4.1把xml文件转化成View对象(三种方式)
通过View.inflate 或者拿到LayoutInflator对象 调用inflate方法
需要判断convertView是否为空 为空 创建对象 不为空复用convertView
4.2 找到要操作的控件 注意 要调用对象 通过这个对象去findviewbyid (view.findviewbyid)
4.3 在数据集合中取出要显示的数据 persons.get(position);
4.4 把数据显示到找到的控件上
⑤ 创建BaseAdapter对象 调用listview 的setAdapter方法 将适配器和listview关联起来
(需要注意 如果对应的数据集合没有数据 则不会看到界面)
具体代码 SQLiteOpenHelper public class MyOpenHelper extends SQLiteOpenHelper { public MyOpenHelper(Context context) { super(context, "itheima.db", null, 1); } @Override public void onCreate(SQLiteDatabase db) { db.execSQL("create table info(_id integer primary key,name varchar(20),phone varchar(20))"); } @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { } } Person public class Person { public String phone; public String name; @Override public String toString() { return "Person [phone=" + phone + ", name=" + name + "]"; } } MainActivity public class MainActivity extends Activity { private SQLiteDatabase database; private ArrayList<Person> persons = new ArrayList<Person>(); private MyAdapter adapter; private ListView lv_list; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //找到关心的控件 Button btn_insert = (Button) findViewById(R.id.btn_insert); Button btn_query = (Button) findViewById(R.id.btn_query); lv_list = (ListView) findViewById(R.id.lv_list); //给按钮添加点击事件 MyOnclickListener listner = new MyOnclickListener(); btn_insert.setOnClickListener(listner); btn_query.setOnClickListener(listner); //创建数据库助手对象 MyOpenHelper openHelper = new MyOpenHelper(this); //获取数据库对象 database = openHelper.getReadableDatabase(); adapter = new MyAdapter(); } private class MyOnclickListener implements OnClickListener{ @Override public void onClick(View v) { switch (v.getId()) { case R.id.btn_insert: ContentValues values = new ContentValues(); values.put("name", "罗陈建"); values.put("phone", "18888888888"); database.insert("info", null, values); ContentValues values2 = new ContentValues(); values2.put("name", "王含含"); values2.put("phone", "13999999999"); database.insert("info", null, values2); ContentValues values3 = new ContentValues(); values3.put("name", "任永伟"); values3.put("phone", "13777777777"); database.insert("info", null, values3); break; case R.id.btn_query: //通过谷歌api查询 Cursor curor = database.query("info", null, null, null, null, null, null); //遍历查询到的结果 while(curor.moveToNext()){ //创建person对象 Person person = new Person(); //根据列名 name 获取数据库中对应的值 String name = curor.getString(curor.getColumnIndex("name")); //根据列名 phone 获取数据库中对应的值 String phone = curor.getString(curor.getColumnIndex("phone")); //设置相应数据 person.name = name; person.phone = phone; //把数据添加到集合 persons.add(person); } // for(Person person :persons){ // System.out.println(person); // } //通知listview显示数据 //或者把数据适配器和listview绑定起来 lv_list.setAdapter(adapter); //关闭游标 curor.close(); break; } } } private class MyAdapter extends BaseAdapter{ //返回要展示的数据集合的条目数 @Override public int getCount() { // TODO Auto-generated method stub return persons.size(); } //通过adapter传进来的posion(listview中条目的position) //把它对应的数据集合中的对象返回来 @Override public Object getItem(int position) { // TODO Auto-generated method stub return persons.get(position); } @Override public long getItemId(int position) { // TODO Auto-generated method stub return position; } @Override public View getView(int position, View convertView, ViewGroup parent) { //①把布局文件转换为View对象 需要判断convertView是否为空 View view= null; if(convertView == null){ //创建view对象 view = View.inflate(MainActivity.this, R.layout.item, null); }else{ //复用旧的convertView view = convertView; } //②找到要修改的控件的对象 注意要调用view.findViewById TextView tv_name = (TextView)view.findViewById(R.id.tv_name); TextView tv_phone = (TextView)view.findViewById(R.id.tv_phone); //③ 设置数据 //3.1通过position 到数据集合中把要显示的数据找到 Person person = persons.get(position); //3.2把要显示的内容展示到对应的View对象上 tv_name.setText(person.name); tv_phone.setText(person.phone); return view; } } //页面销毁时会调用这个方法 一般在这个方法中做关闭释放资源的操作 @Override protected void onDestroy() { super.onDestroy(); //关闭数据库 database.close(); } } 整个应用的布局 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" tools:context=".MainActivity" > <Button android:id="@+id/btn_insert" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="插入数据" /> <Button android:id="@+id/btn_query" android:layout_toRightOf="@id/btn_insert" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="查询数据" /> <ListView android:id="@+id/lv_list" android:layout_below="@id/btn_insert" android:layout_width="match_parent" android:layout_height="match_parent" /> </RelativeLayout> 条目的布局 <?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" android:padding="8dp" > <ImageView android:id="@+id/iv_icon" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_margin="8dp" android:src="@drawable/ic_launcher" /> <TextView android:id="@+id/tv_name" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_toRightOf="@id/iv_icon" android:layout_marginTop="10dp" android:textSize="18sp" android:text="姓名:王含含" /> <TextView android:id="@+id/tv_phone" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_below="@id/tv_name" android:layout_toRightOf="@id/iv_icon" android:layout_marginTop="5dp" android:textColor="#88000000" android:text="电话:13888888888" /> </RelativeLayout>