填充ListView(继承BaseAdapter)

来源:互联网 发布:vb.net int 编辑:程序博客网 时间:2024/05/14 10:02

主要代码

package com.example.test;import android.app.Activity;import android.database.Cursor;import android.database.sqlite.SQLiteDatabase;import android.support.v7.app.ActionBarActivity;import android.os.Bundle;import android.view.Menu;import android.view.MenuItem;import android.view.View;import android.view.ViewGroup;import android.widget.BaseAdapter;import android.widget.ListView;import android.widget.TextView;import java.util.ArrayList;import java.util.List;public class ListData extends Activity {    private List<Person> personList;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_list_data);        MyDBHelper helper = new MyDBHelper(this);        SQLiteDatabase db = helper.getWritableDatabase();        Cursor cursor = db.rawQuery("select name,age from person", null);        personList = new ArrayList<Person>();        while (cursor.moveToNext()) {            String name = cursor.getString(0);            String age = cursor.getString(1);            Person person = new Person(name, age);            personList.add(person);        }        ListView list = (ListView) findViewById(R.id.list);        list.setAdapter(new MyAdapter());    }    class MyAdapter extends BaseAdapter {        //这个可以不实现        @Override        public Object getItem(int position) {            return null;        }        //这个可以不实现        @Override        public long getItemId(int position) {            return 0;        }        @Override        public int getCount() {            return personList.size();        }        @Override        public View getView(int position, View convertView, ViewGroup parent) {            System.out.println(position);            /**             *    View v=null;             *    if(convertView==null){             *      TextView textView=new TextView(ListData.this);             *      textView.setText(personList.get(position).toString());             *      textView.setTextSize(18);             *      v=textView;             *    }else{             *          v=convertView;             *    }             * 这样编写是不对的             * 因为当这个listview滑动的时候会缓存很多个textView,而当listview要获取他的缓存时             * 不能确定要获取哪一个缓存,只能是随机获取一个             * 所以正确的应该是             *             *             */            TextView textView = new TextView(ListData.this);            textView.setText(personList.get(position).toString());            textView.setTextSize(18);            return textView;        }    }}

MyDBHelper

package com.example.test;import android.content.Context;import android.database.sqlite.SQLiteDatabase;import android.database.sqlite.SQLiteOpenHelper;import android.util.Log;/** * Created by joy on 2015/12/26. */public class MyDBHelper extends SQLiteOpenHelper {    private final static String DB_NAME="person.db";    public MyDBHelper(Context context) {        //第一个参数上下文,第二个参数数据库名,第三个参数游标工厂,第四个参数数据库版本号        //数据库文件保存在data/data/包名/databases/person.db        super(context, DB_NAME, null, 2);    }    @Override    public void onCreate(SQLiteDatabase db) {        //数据库创建时调用        db.execSQL("create table person(_id integer primary key autoincrement,name varchar(20),age varchar(2))");    }    @Override    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {        //数据库升级时调用        Log.e("gjj","数据库更新了");    }}

布局文件

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:layout_width="match_parent"    android:layout_height="match_parent"    android:orientation="vertical"    >    <ListView        android:id="@+id/list"        android:layout_width="wrap_content"        android:layout_height="wrap_content" /></LinearLayout>

person类

package com.example.test;/** * Created by joy on 2015/12/24. */public class Person {    private String name;    private String age;    public String getName() {        return name;    }    public String getAge() {        return age;    }    public void setName(String name) {        this.name = name;    }    public void setAge(String age) {        this.age = age;    }    public Person(String name, String age) {        this.name = name;        this.age = age;    }    @Override    public String toString() {        return name +                ", " + age;    }}
0 0