[Android Studio:使用ListView显示SQLite数据库行的ArrayList

问题描述 投票:0回答:2

我有一个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 getAllCampsites(){...

java android sqlite android-studio listview
2个回答
0
投票

您需要先移动光标。请参考下面的代码:

                         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);
                        }

0
投票

创建一个扩展BaseAdapter的自定义适配器类,然后实现这些方法,然后在getView方法中将布局ID传递给视图,以便您可以访问布局文件中的textview。

© www.soinside.com 2019 - 2024. All rights reserved.