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

我刚开始学习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 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(适配器);
转到以下位置: