每日日报

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>

 

posted @ 2021-02-05 11:50  durtime  阅读(79)  评论(0)    收藏  举报