为了账号安全,请及时绑定邮箱和手机立即绑定

使用 ListView 显示 SQLite 数据库行的 ArrayList

使用 ListView 显示 SQLite 数据库行的 ArrayList

杨__羊羊 2023-09-06 16:13:52
我有一个 SQLite 数据库,我想使用 ListView 显示每个 ROW/Campsite。DBHandler 方法返回 Campsites 的 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;}我有一个名为“浏览”的活动,它在布局文件中包含 ListView。我还有一个 browser_row_layout ,它具有一行/露营地的布局。因此,在 Browse.java 中,我需要创建适配器来显示每个露营地。注意:我仅在列表视图中显示 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;@Overrideprotected 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 创建一个适配器来显示露营地列表中的每个露营地,其中包含数据库的每一行。
查看完整描述

2 回答

?
慕尼黑的夜晚无繁华

TA贡献1864条经验 获得超6个赞

创建一个扩展 BaseAdapter 的自定义适配器类,然后实现方法,然后在 getView 方法中将布局 id 传递给视图,以便您可以访问布局文件中的 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;

    }

 }

这是您的列表视图活动


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

}

我希望这可以帮助你。


查看完整回答
反对 回复 2023-09-06
?
喵喔喔

TA贡献1735条经验 获得超5个赞

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


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

                        }


查看完整回答
反对 回复 2023-09-06
  • 2 回答
  • 0 关注
  • 78 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信