我有一个SQLite数据库,我想使用ListView显示每个ROW / Campsite。
DBHandler方法返回营地的ArrayList:
public ArrayList<Campsite> getAllCampsites() {
SQLiteDatabase db = this.getReadableDatabase();
Cursor cursor = db.rawQuery("SELECT * FROM " + TABLE_CAMPSITES, null);
ArrayList<Campsite> campsites = new ArrayList<>();
Campsite campsite;
if (cursor.getCount() > 0) {
for (int i = 0; i < cursor.getCount(); i++) {
cursor.moveToNext();
campsite = new Campsite();
campsite.setName(cursor.getString(1));
campsite.setCity(cursor.getString(2));
campsite.setFeature(cursor.getString(3));
campsite.setFavorite(cursor.getString(4));
campsite.setRating(cursor.getInt(5));
campsite.setLatitude(cursor.getDouble(6));
campsite.setLongitude(cursor.getDouble(7));
campsites.add(campsite);
}
}
cursor.close();
db.close();
return campsites;
}
我有一个名为Browse的活动,该活动在布局文件中具有ListView。我也有一个browser_row_layout,它具有一个行/营地的布局。
因此,在Browse.java中,我需要创建适配器以显示每个露营地。注意:我只在列表视图中显示3个特定的列(名称,城市,地图项)
因此,我有一个activity_browse布局文件,该文件具有实际的ListView元素,而Browse_row_layout代表该数据库的1行,并且只有3列具有TextViews。
到目前为止我所拥有的:
import android.os.Bundle; import android.widget.ListView; import androidx.appcompat.app.AppCompatActivity; import java.util.ArrayList; public class Browse extends AppCompatActivity { ListView lvCampsites; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_browse); lvCampsites= findViewById(R.id.lvCampsites); DatabaseHandler db = new DatabaseHandler(this); ArrayList<Campsite> campsites = db.getAllCampsites(); }
}
TLDR:如何使用ListView创建适配器以显示具有数据库每一行的营地列表中的每个营地。
我有一个SQLite数据库,我想使用ListView显示每个ROW / Campsite。返回一个Campsites ArrayList的DBHandler方法:public ArrayList
您需要先移动光标。请参考下面的代码:
if (cursor!=null && cursor.getCount()> 0){
cursor.moveToFirst();
do{
Campsite campsite = new Campsite();
campsite.setName(cursor.getString(1));
campsite.setCity(cursor.getString(2));
campsite.setFeature(cursor.getString(3));
campsite.setFavorite(cursor.getString(4));
campsite.setRating(cursor.getInt(5));
campsite.setLatitude(cursor.getDouble(6));
campsite.setLongitude(cursor.getDouble(7));
campsites.add(campsite);
}while(cursor.moveToNext);
}
创建一个扩展BaseAdapter的自定义适配器类,然后实现这些方法,然后在getView方法中将布局ID传递给视图,以便您可以访问布局文件中的textview。