Android 如何从数据库中填充自定义ListView项
我刚开始学习Android编程。 我有个问题。如何创建自定义适配器以填充自定义ListView项 列表视图项目代码:Android 如何从数据库中填充自定义ListView项,android,database,listview,android-listview,android-arrayadapter,Android,Database,Listview,Android Listview,Android Arrayadapter,我刚开始学习Android编程。 我有个问题。如何创建自定义适配器以填充自定义ListView项 列表视图项目代码: public class DataBase { public static final String DB_NAME = "appdb"; public static final int DB_VERSION = 1; static final String TABLE_NAME = "passtab"; final Strin
public class DataBase {
public static final String DB_NAME = "appdb";
public static final int DB_VERSION = 1;
static final String TABLE_NAME = "passtab";
final String LOG_TAG = "myLogs";
public static final String COLUMN_ID = "_id";
public static final String COLUMN_TITLE = "title_enter";
public static final String COLUMN_LOGIN = "login_enter";
public static final String COLUMN_PASSWORD = "password_enter";
public static final String COLUMN_URL = "link_enter";
public static final String COLUMN_COMMENT = "comment_enter";
public static final String COLUMN_DATE = "date_enter";
public String results;
private DBHelper phdb;
private static Context pcontext;
private SQLiteDatabase pdb;
private static final String DB_CREATE =
"create table " + TABLE_NAME + "(" +
COLUMN_ID + " integer primary key autoincrement, " +
COLUMN_TITLE + " VARCHAR(255), " +
COLUMN_LOGIN + " VARCHAR(255), " +
COLUMN_PASSWORD + " VARCHAR(255), " +
COLUMN_URL + " VARCHAR(255), " +
COLUMN_COMMENT + " text, " +
COLUMN_DATE + " VARCHAR(255)" +
");";
public class DBHelper extends SQLiteOpenHelper{
public DBHelper(Context context) {
super(context, DB_NAME, null, DB_VERSION);
}
@Override
public void onCreate(SQLiteDatabase sqLiteDatabase) {
sqLiteDatabase.execSQL(DB_CREATE);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
}
}
public DataBase(Context c) {
pcontext = c;
}
public DataBase open() throws SQLiteException {
phdb = new DBHelper(pcontext);
pdb = phdb.getWritableDatabase();
return this;
}
public SQLiteDatabase getDatabase() {
return pdb;
}
public void close() {
pdb.close();
}
...
public List<String> getData() {
String[] columns = new String[] { COLUMN_TITLE };
Cursor c = pdb.query(TABLE_NAME, columns, null, null, null, null,
null);
List<String> results = new ArrayList<String>();
int iCM = c.getColumnIndex(COLUMN_TITLE);
for (c.moveToFirst(); !c.isAfterLast(); c.moveToNext()) {
results.add(c.getString(iCM));
}
return results;
}}
public class MainScreen extends FragmentActivity implements OnClickListener {
ListView listViewMain;
SQLiteDatabase db;
DataBase DB;
DBHelper dbH;
Cursor cursor;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main_screen);
...
listViewMain = (ListView) findViewById(R.id.listViewMain);
DBHelper dbc = new DBHelper(MainScreen.this);
dbc.open();
String[] cs = new String[] { DataBase.COLUMN_TITLE };
Log.d(LOG_TAG, cs.toString());
listViewMain.setAdapter(new MySimpleAdapter<String>(this,
android.R.layout.item, cs));
dbc.close();
}
public class MySimpleAdapter extends SimpleAdapter {
public MySimpleAdapter(Context context,
List<? extends Map<String, ?>> data, int resource,
String[] from, int[] to) {
super(context, data, resource, from, to);
}
item.xml
数据库帮助程序:
public class DataBase {
public static final String DB_NAME = "appdb";
public static final int DB_VERSION = 1;
static final String TABLE_NAME = "passtab";
final String LOG_TAG = "myLogs";
public static final String COLUMN_ID = "_id";
public static final String COLUMN_TITLE = "title_enter";
public static final String COLUMN_LOGIN = "login_enter";
public static final String COLUMN_PASSWORD = "password_enter";
public static final String COLUMN_URL = "link_enter";
public static final String COLUMN_COMMENT = "comment_enter";
public static final String COLUMN_DATE = "date_enter";
public String results;
private DBHelper phdb;
private static Context pcontext;
private SQLiteDatabase pdb;
private static final String DB_CREATE =
"create table " + TABLE_NAME + "(" +
COLUMN_ID + " integer primary key autoincrement, " +
COLUMN_TITLE + " VARCHAR(255), " +
COLUMN_LOGIN + " VARCHAR(255), " +
COLUMN_PASSWORD + " VARCHAR(255), " +
COLUMN_URL + " VARCHAR(255), " +
COLUMN_COMMENT + " text, " +
COLUMN_DATE + " VARCHAR(255)" +
");";
public class DBHelper extends SQLiteOpenHelper{
public DBHelper(Context context) {
super(context, DB_NAME, null, DB_VERSION);
}
@Override
public void onCreate(SQLiteDatabase sqLiteDatabase) {
sqLiteDatabase.execSQL(DB_CREATE);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
}
}
public DataBase(Context c) {
pcontext = c;
}
public DataBase open() throws SQLiteException {
phdb = new DBHelper(pcontext);
pdb = phdb.getWritableDatabase();
return this;
}
public SQLiteDatabase getDatabase() {
return pdb;
}
public void close() {
pdb.close();
}
...
public List<String> getData() {
String[] columns = new String[] { COLUMN_TITLE };
Cursor c = pdb.query(TABLE_NAME, columns, null, null, null, null,
null);
List<String> results = new ArrayList<String>();
int iCM = c.getColumnIndex(COLUMN_TITLE);
for (c.moveToFirst(); !c.isAfterLast(); c.moveToNext()) {
results.add(c.getString(iCM));
}
return results;
}}
public class MainScreen extends FragmentActivity implements OnClickListener {
ListView listViewMain;
SQLiteDatabase db;
DataBase DB;
DBHelper dbH;
Cursor cursor;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main_screen);
...
listViewMain = (ListView) findViewById(R.id.listViewMain);
DBHelper dbc = new DBHelper(MainScreen.this);
dbc.open();
String[] cs = new String[] { DataBase.COLUMN_TITLE };
Log.d(LOG_TAG, cs.toString());
listViewMain.setAdapter(new MySimpleAdapter<String>(this,
android.R.layout.item, cs));
dbc.close();
}
public class MySimpleAdapter extends SimpleAdapter {
public MySimpleAdapter(Context context,
List<? extends Map<String, ?>> data, int resource,
String[] from, int[] to) {
super(context, data, resource, from, to);
}
公共类数据库{
公共静态最终字符串DB_NAME=“appdb”;
公共静态最终int DB_版本=1;
静态最终字符串表\u NAME=“passtab”;
最终字符串日志\u TAG=“myLogs”;
公共静态最终字符串列_ID=“_ID”;
公共静态最终字符串列\u TITLE=“TITLE\u enter”;
公共静态最终字符串列\u LOGIN=“LOGIN\u enter”;
公共静态最终字符串列\u PASSWORD=“PASSWORD\u enter”;
公共静态最终字符串列\u URL=“link\u enter”;
公共静态最终字符串列\u COMMENT=“COMMENT\u enter”;
公共静态最终字符串列\u DATE=“DATE\u enter”;
公共字符串结果;
私人数据库;
私有静态上下文;
专用数据库pdb;
私有静态最终字符串DB_CREATE=
“创建表格”+表格名称+”(“+
列ID+“整数主键自动递增,”+
列标题+“VARCHAR(255),”+
列登录+“VARCHAR(255),”+
列_密码+“VARCHAR(255),”+
列URL+“VARCHAR(255),”+
列_注释+“文本,”+
列_DATE+“VARCHAR(255)”+
");";
公共类DBHelper扩展了SQLiteOpenHelper{
公共DBHelper(上下文){
super(上下文,数据库名称,空,数据库版本);
}
@凌驾
public void onCreate(SQLiteDatabase SQLiteDatabase){
execSQL(DB_CREATE);
}
@凌驾
public void onUpgrade(SQLiteDatabase db,int-oldVersion,int-newVersion){
}
}
公共数据库(上下文c){
pcontext=c;
}
公共数据库open()引发SQLiteException{
phdb=新的DBHelper(pcontext);
pdb=phdb.getWritableDatabase();
归还这个;
}
公共SQLiteDatabase getDatabase(){
返回pdb;
}
公众假期结束(){
pdb.close();
}
...
公共列表getData(){
字符串[]列=新字符串[]{COLUMN_TITLE};
游标c=pdb.query(表名称、列、null、null、null、null、,
无效);
列表结果=新建ArrayList();
int iCM=c.getColumnIndex(列标题);
for(c.moveToFirst();!c.isAfterLast();c.moveToNext()){
添加(c.getString(iCM));
}
返回结果;
}}
main活动:
public class DataBase {
public static final String DB_NAME = "appdb";
public static final int DB_VERSION = 1;
static final String TABLE_NAME = "passtab";
final String LOG_TAG = "myLogs";
public static final String COLUMN_ID = "_id";
public static final String COLUMN_TITLE = "title_enter";
public static final String COLUMN_LOGIN = "login_enter";
public static final String COLUMN_PASSWORD = "password_enter";
public static final String COLUMN_URL = "link_enter";
public static final String COLUMN_COMMENT = "comment_enter";
public static final String COLUMN_DATE = "date_enter";
public String results;
private DBHelper phdb;
private static Context pcontext;
private SQLiteDatabase pdb;
private static final String DB_CREATE =
"create table " + TABLE_NAME + "(" +
COLUMN_ID + " integer primary key autoincrement, " +
COLUMN_TITLE + " VARCHAR(255), " +
COLUMN_LOGIN + " VARCHAR(255), " +
COLUMN_PASSWORD + " VARCHAR(255), " +
COLUMN_URL + " VARCHAR(255), " +
COLUMN_COMMENT + " text, " +
COLUMN_DATE + " VARCHAR(255)" +
");";
public class DBHelper extends SQLiteOpenHelper{
public DBHelper(Context context) {
super(context, DB_NAME, null, DB_VERSION);
}
@Override
public void onCreate(SQLiteDatabase sqLiteDatabase) {
sqLiteDatabase.execSQL(DB_CREATE);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
}
}
public DataBase(Context c) {
pcontext = c;
}
public DataBase open() throws SQLiteException {
phdb = new DBHelper(pcontext);
pdb = phdb.getWritableDatabase();
return this;
}
public SQLiteDatabase getDatabase() {
return pdb;
}
public void close() {
pdb.close();
}
...
public List<String> getData() {
String[] columns = new String[] { COLUMN_TITLE };
Cursor c = pdb.query(TABLE_NAME, columns, null, null, null, null,
null);
List<String> results = new ArrayList<String>();
int iCM = c.getColumnIndex(COLUMN_TITLE);
for (c.moveToFirst(); !c.isAfterLast(); c.moveToNext()) {
results.add(c.getString(iCM));
}
return results;
}}
public class MainScreen extends FragmentActivity implements OnClickListener {
ListView listViewMain;
SQLiteDatabase db;
DataBase DB;
DBHelper dbH;
Cursor cursor;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main_screen);
...
listViewMain = (ListView) findViewById(R.id.listViewMain);
DBHelper dbc = new DBHelper(MainScreen.this);
dbc.open();
String[] cs = new String[] { DataBase.COLUMN_TITLE };
Log.d(LOG_TAG, cs.toString());
listViewMain.setAdapter(new MySimpleAdapter<String>(this,
android.R.layout.item, cs));
dbc.close();
}
public class MySimpleAdapter extends SimpleAdapter {
public MySimpleAdapter(Context context,
List<? extends Map<String, ?>> data, int resource,
String[] from, int[] to) {
super(context, data, resource, from, to);
}
public类主屏幕扩展FragmentActivity实现OnClickListener{
ListView listViewMain;
sqlitedb数据库;
数据库数据库;
胸径;
光标;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(右布局主屏幕);
...
listViewMain=(ListView)findViewById(R.id.listViewMain);
DBHelper dbc=新的DBHelper(MainScreen.this);
dbc.open();
字符串[]cs=新字符串[]{DataBase.COLUMN_TITLE};
Log.d(Log_标记,cs.toString());
listViewMain.setAdapter(新的MySimpleAdapter(此,
android.R.layout.item,cs);
dbc.close();
}
公共类mysimpledapter扩展了simpledapter{
公共MySimpleAdapter(上下文,
列表>数据,int资源,
字符串[]从,整数[]到){
超级(上下文、数据、资源、从、到);
}
如何编写适配器并将其用于ListView?
onCreate
方法:
List<String> results = DBHelper.getData();
listViewMain = (ListView) findViewById(R.id.listViewMain);
ArrayAdapter adapter = new ArrayAdapter(this,
android.R.layout.simple_list_item_1, results);
listViewMain.setListAdapter(adapter);
List results=DBHelper.getData();
listViewMain=(ListView)findViewById(R.id.listViewMain);
ArrayAdapter=新的ArrayAdapter(此,
android.R.layout.simple_list_item_1,results);
setListAdapter(适配器);
转到以下位置: