Java Android Studio:使用ListView显示SQLite数据库行的ArrayList
我有一个SQLite数据库,我想使用ListView显示每一行/营地 返回营地ArrayList的DBHandler方法:Java Android Studio:使用ListView显示SQLite数据库行的ArrayList,java,android,sqlite,listview,Java,Android,Sqlite,Listview,我有一个SQLite数据库,我想使用ListView显示每一行/营地 返回营地ArrayList的DBHandler方法: public ArrayList<Campsite> getAllCampsites() { SQLiteDatabase db = this.getReadableDatabase(); Cursor cursor = db.rawQuery("SELECT * FROM " + TABLE_CAMPSITES, null); Arra
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;
}
公共阵列列表getAllCampsites(){
SQLiteDatabase db=this.getReadableDatabase();
Cursor Cursor=db.rawQuery(“选择*自”+表_营地,空);
ArrayList营地=新建ArrayList();
营地营地;
if(cursor.getCount()>0){
对于(int i=0;iimport 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();
}
导入android.os.Bundle;
导入android.widget.ListView;
导入androidx.appcompat.app.appcompat活动;
导入java.util.ArrayList;
公共类浏览扩展AppCompatActivity{
ListView露营地;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity\u浏览);
lvCampsites=findviewbyd(R.id.lvCampsites);
DatabaseHandler db=新的DatabaseHandler(此);
ArrayList campsites=db.getAllCampsites();
}
}
TLDR:如何使用ListView创建一个适配器来显示营地列表中的每个营地,该列表包含数据库的每一行 您需要首先移动光标。请参阅以下代码:
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
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;
}
}
公共类营地Stadapter扩展BaseAdapter{
私有上下文;
私有数组列表;
公共营地静态适配器(上下文mContext,列出国家/地区){
this.mContext=mContext;
该列表=国家;
}
@凌驾
public int getCount(){
返回list.size();
}
@凌驾
公共对象getItem(int位置){
返回列表。获取(位置);
}
@凌驾
公共长getItemId(int位置){
返回位置;
}
@凌驾
公共视图getView(int位置、视图转换视图、视图组父视图){
视图=视图。充气(mContext,R.layout.campsite\u layout,null);
TextView name=(TextView)view.findViewById(R.id.nametxt);
Textview城市=(Textview)view.findViewById(R.id.cityText);
Textview功能=(Textview)view.findViewById(R.id.featuretxt);
name.setText(list.get(position.getname());
city.setText(list.get(position.getcity());
feature.setText(list.get(position.getfeature());
返回视图;
}
}
这是您的listview活动
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);
}
导入android.os.Bundle;
导入android.widget.ListView;
导入androidx.appcompat.app.appcompat活动;
导入java.util.ArrayList;
公共类浏览扩展AppCompatActivity{
ListView露营地;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity\u浏览);
lvCampsites=findviewbyd(R.id.lvCampsites);
DatabaseHandler db=新的DatabaseHandler(此);
ArrayList campsites=db.getAllCampsites();
//自定义适配器的实例
CampsitesListAdapter=新的CampsitesListAdapter(此为露营地);
//将适配器设置为listview
lvCampsites.setAdapter(适配器);
}
我希望这可能会对你有所帮助。这可能会对你有所帮助。当你可以使用RecycleServiceWn时,是否有任何特定的需要使用listview?没有特定的需要,我已经读过。它会改变我显示数据的方式吗?你的数据没有什么特别的,只需要使用你在谷歌上找到的任何自定义listview适配器教程。另外,请使用
android studio
仅为IDE特定的问题标记。谢谢,关于使用适配器在listview中显示它的想法?@Override public View getView(int position,View convertView,ViewGroup parent){LayoutFlater inflater=(LayoutFlater)context.getSystemService(context.LAYOUT\u inflater\u SERVICE);View View=inflater.inflate(R.layout.campsite_layout,parent,false);return view;}像上面那样更改getView()方法并绑定视图和设置文本感谢我能够通过将每个campsite对象添加到arraylist中、设置自定义列表适配器,以及使用campsite campsite=(campsite)在setOnItemClickListner()中获取每个campsiteparent.getItemAtPosition(位置);很抱歉,但我实际上如何在我的ListView活动中实现这一点?首先为adapter创建一个单独的类,然后在ListView活动中创建adapter类的实例,并将营地的arraylist传递给adapter的构造函数和上下文,然后将adapter设置为ListView。我已经编辑了答案我想这可能会对你有所帮助。是的,我刚才能够成功地做到这一点,谢谢。现在我真的想添加一个新的监听器,让它变得如此w