• 每日日报


    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>
  • 相关阅读:
    推荐Windows下SVN服务器端和客户端工具软件
    QT的一些小知识
    Qt
    Qt
    ADB
    HTTP
    Python
    项目附
    项目
    架构
  • 原文地址:https://www.cnblogs.com/zhukaile/p/14376948.html
Copyright © 2020-2023  润新知