java - Android Studio : Display ArrayList of SQLite database rows using ListView

标签 java android sqlite listview

我有一个 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;
}

我有一个名为“浏览”的 Activity ,它在布局文件中包含 ListView。我还有一个 browser_row_layout,它具有一行/露营地的布局。

因此,在 Browse.java 中,我需要创建适配器来显示每个露营地。 注意:我仅在 ListView 中显示 3 个特定列(名称、城市、功能)

因此,我有 Activity_browse 布局文件,其中包含实际的 ListView 元素和 browser_row_layout,它代表数据库的 1 行,并且仅包含 3 列的 TextView。

到目前为止我所拥有的:

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 创建一个适配器来显示包含数据库每一行的露营地列表中的每个露营地。

最佳答案

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

public class CampsitesListAdapter extends BaseAdapter {

    private Context mContext;
    private ArrayList<Campsites> list;

    public CampsitesListAdapter(Context mContext , List<Campsites> countries) {
        this.mContext = mContext;
        this.list = countries;
    }

    @Override
    public int getCount() {
        return list.size();
    }

    @Override
    public Object getItem(int position) {
        return list.get(position);
    }

    @Override
    public long getItemId(int position) {
        return position;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {

        View view = View.inflate(mContext, R.layout.campsite_layout , null );
        TextView name = (TextView) view.findViewById(R.id.nametxt);
        Textview city = (Textview) view.findViewById(R.id.citytxt);
        Textview feature = (Textview) view.findViewById(R.id.featuretxt);

        name.setText(list.get(position).getname());
        city.setText(list.get(position).getcity());
        feature.setText(list.get(position).getfeature());

        return view;
    }
 }

这是您的 ListView Activity

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

    //Instance of custom adapter 
    CampsitesListAdapter adapter = new CampsitesListAdapter(this ,   campsites);
   //Setting adapter to listview
   lvCampsites.setAdapter(adapter);
}

希望这对您有帮助。

关于java - Android Studio : Display ArrayList of SQLite database rows using ListView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58127698/

相关文章:

java - URL 中带有空格的音频文件无法在我的应用程序中播放

java - 改造覆盖端点

android - 为什么只在默认位置获取录制的音频

android - WARN/InputManagerService(59) : Window already focused, 忽略 : com. android.internal.view.IInputMethodClient$Stub$Proxy@44f8eb98 的焦点增益

安卓 : Only one button clickable at once

java - 如何在 Android 中使用 Gson 和 Retrofit 解析深层嵌套 json 对象中的字段?

java - 审核数据库插件 - Jenkins : org. hibernate.HibernateException

Sqlite3 rowid 与 AUTOINCREMTENT

java - 未调用 Android SQLiteHelper OnCreate 方法。导致没有这样的表异常

sql - 选择SQLite表的许多行时应用程序崩溃