如何将 RecyclerView 与数据库一起使用?
How to use RecylerView with Database?
我有一个问题,我坐了 3 天,我想不出任何东西。也就是说,我正在为一家餐厅编写一个应用程序,我有一个 SaladMeterialFragment
activity,它在 RecyclerView
中显示 CardView
。当我使用 Salad class 并从中提取数据时,一切正常。但是,我需要重写 SaladMaterialFragment
以处理从 DatabaseHelper
检索到的数据。整个问题是我不太清楚这些下载的数据是如何附加到我在 RecyclerView
下准备的适配器的。我如何从游标中检索数据并将它们保存在 String []
数组中,因为我只需要 RecyclerView
适配器?
SaladMaterialFragment
激活 SaladDetailFragment
activity,在那里我能够启动数据库并且一切正常。但是我不知道 RecyclerView
视图应该是什么样子?本人初学开发,刚学数据库,请耐心解释。预先感谢您的帮助。
回收器适配器
//我必须有一个STRING[]
和INT[]
,但是游标return String or int,那么如何从数据库中获取这种格式的数据: String[] ; int[] ?
// 我必须在这里更改我的适配器 class 中的任何内容吗?如果我想使用数据库?
import android.support.v7.widget.CardView;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;
class RecyclerAdapter extends RecyclerView.Adapter<CaptionedImagesAdapter.ViewHolder> {
private String[] captions;
private int[] imageIds;
private Listener listener;
public static interface Listener {
public void onClick(int position);
}
public static class ViewHolder extends RecyclerView.ViewHolder {
private CardView cardView;
public ViewHolder(CardView v) {
super(v);
cardView=v;
}
}
public RecyclerAdapter(String[] captions, int[] imageIds){
this.captions = captions;
this.imageIds = imageIds;
}
public void setListener(Listener listener) {
this.listener = listener;
}
@Override
public RecyclerAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
CardView cv = (CardView) LayoutInflater.from(parent.getContext())
.inflate(R.layout.card_captioned_image, parent, false);
return new ViewHolder(cv);
}
@Override
public void onBindViewHolder(ViewHolder holder, final int position) {
CardView cardView = holder.cardView;
ImageView imageView = (ImageView)cardView.findViewById(R.id.info_image);
Drawable drawable = cardView.getResources().getDrawable(imageIds[position]);
imageView.setImageDrawable(drawable);
imageView.setContentDescription(captions[position]);
TextView textView = (TextView)cardView.findViewById(R.id.info_text);
textView.setText(captions[position]);
cardView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if(listener != null) {
listener.onClick(position);
}
}
});
}
@Override
public int getItemCount() {
return captions.length;
}
}
DatabaseHelper
public class DatabaseHelper extends SQLiteOpenHelper {
private static final String DB_NAME = "miodzio";
private static final int DB_VERSION = 1;
public MiodzioDatabaseHelper(Context context) {
super(context, DB_NAME, null, DB_VERSION);
}
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL("CREATE TABLE SALAD (_id INTEGER PRIMARY KEY AUTOINCREMENT, "
+ "NAME TEXT, "
+ "IMAGE_RESOURCE_ID INTEGER, "
+ "FAVORITE INTEGER);");
insertSalad(db, "Sałatka grecka", R.drawable.salatka_grecka, 0);
insertSalatki(db, "Sałatka z grillowanym kurczakiem", R.drawable.salatka_z_kurczakiem, 0);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
}
private static void insertSalad(SQLiteDatabase db, String name, int resourceId, int favorite){
ContentValues saladValues = new ContentValues();
saladValues.put("NAME", name);
saladValues.put("IMAGE_RESOURCE_ID", resourceId);
saladValues.put("Favorite", favorite);
db.insert("SALAD", null, saladValues);
}
}
Salad.java
//
目前,SaladMaterialFragment 的数据是从这个 class 中检索的,一切正常
//
public class 沙拉 {
private String name;
private int imageResourceId;
public static final Salads[] salad = {
new Salatki("Sałatka grecka", R.drawable.salatka_grecka),
new Salatki("Sałatka z grillowanym kurczakiem", R.drawable.salatka_z_kurczakiem)
};
private Salatki(String name, int imageResourceId) {
this.name = name;
this.imageResourceId = imageResourceId;
}
public String getName() {
return name;
}
public int getImageResourceId() {
return imageResourceId;
}
}
SaladDeteilActivity
import android.content.ContentValues;
import android.content.Intent;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteException;
import android.database.sqlite.SQLiteOpenHelper;
import android.os.Bundle;
import android.support.v4.view.MenuItemCompat;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.ShareActionProvider;
import android.support.v7.widget.Toolbar;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.CheckBox;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;
public class SaladDetailActivity extends AppCompatActivity {
public static final String EXTRA_SALATKI = "salatki";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_salatki_detail);
int salatki = (Integer) getIntent().getExtras().get(EXTRA_SALATKI);
/*
The old way of retrieving data is class Salad
*/
/* String salatkiName = Salatki.salatka[salatki].getName();
TextView textView = (TextView) findViewById(R.id.salatki_text);
textView.setText(salatkiName);
int salatkiImage = Salatki.salatka[salatki].getImageResourceId();
ImageView imageView = (ImageView) findViewById(R.id.salatki_image);
imageView.setImageDrawable(getResources().getDrawable(salatkiImage));
imageView.setContentDescription(salatkiName);*/
//We retrieve data from the database, everything works in this class!
try {
SQLiteOpenHelper databaseHelper = new DatabaseHelper(this);
SQLiteDatabase db = databaseHelper.getReadableDatabase();
Cursor cursor = db.query("SALAD",
new String[]{"NAME", "IMAGE_RESOURCE_ID", "FAVORITE"},
"_id = ?",
new String[]{Integer.toString(salatki)},
null, null, null);
if(cursor.moveToNext()) {
String nameText = cursor.getString(0);
int photoId = cursor.getInt(1);
boolean isFavorite = (cursor.getInt(2) == 1);
//Display name salad
TextView name = (TextView) findViewById(R.id.salatki_text);
name.setText(nameText);
//Display photo salad
ImageView photo = (ImageView) findViewById(R.id.salatki_image);
photo.setImageResource(photoId);
photo.setContentDescription(nameText);
//Check it for the favorite
CheckBox favorite = (CheckBox) findViewById(R.id.favorite);
favorite.setChecked(isFavorite);
}
cursor.close();
db.close();
}catch (SQLiteException e){
Toast.makeText(this, "Baza danych niedostępna!", Toast.LENGTH_SHORT).show();
}
// getSupportActionBar().setDisplayHomeAsUpEnabled(true); //przycisk w górę!
Toolbar myChildToolbarZupy = (Toolbar) findViewById(R.id.my_child_toolbar_salatki_detail);
setSupportActionBar(myChildToolbarZupy);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
}
}
public void onFavoriteClicked(View view) {
int salatki = (Integer) getIntent().getExtras().get(EXTRA_SALATKI);
CheckBox favorite = (CheckBox) findViewById(R.id.favorite);
ContentValues salatkiValues = new ContentValues();
salatkiValues.put("FAVORITE", favorite.isChecked());
SQLiteOpenHelper databaseHelper = new DatabaseHelper(this);
SQLiteDatabase db = databaseHelper.getWritableDatabase();
db.update("SALAD", salatkiValues,
"_id = ?", new String[]{Integer.toString(salatki)});
db.close();
}
}
SaladMaterialFragment
*
在这个 class 中,有一个问题,我的问题是如果我使用适配器和 RecyclerView 视图,如何从数据库中提取数据以显示名称和照片。有关系吗?
我需要将游标中的数据转换为String []
和int []
,但是游标没有return这些类型。*
import android.app.Fragment;
import android.content.Intent;
import android.os.Bundle;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
public class SalatkiMaterialFragment extends Fragment {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
RecyclerView salatkaRecyler = (RecyclerView) inflater.inflate(R.layout.fragment_salatki_material, container, false);
/*
At the moment data is retrieved from the Salad class, I care to be retrieved from DatabaseHelper.
*/
String[] salatkaName = new String[Salatki.salatka.length];
for(int i=0; i<salatkaName.length; i++) {
salatkaName[i] = Salatki.salatka[i].getName();
}
int[] salatkaImage = new int[Salatki.salatka.length];
for(int i=0; i<salatkaImage.length; i++) {
salatkaImage[i] = Salatki.salatka[i].getImageResourceId();
}
//This adapter adopts in the constructor type: String [] and int []
RecyclerAdapter adapter = new RecyclerAdapter(salatkaName, salatkaImage);
salatkaRecyler.setAdapter(adapter);
LinearLayoutManager manager = new LinearLayoutManager(inflater.getContext(), LinearLayoutManager.VERTICAL, false);
salatkaRecyler.setLayoutManager(manager);
adapter.setListener(new CaptionedImagesAdapter.Listener() {
@Override
public void onClick(int position) {
Intent intent = new Intent(getActivity(), SalatkiDetailActivity.class);
intent.putExtra(SalatkiDetailActivity.EXTRA_SALATKI, position);
getActivity().startActivity(intent);
/*
Here I will write my code, which I tried to prick. Of course he does not work, but maybe it will serve to better focus on what exactly I mean.
*/
/*
try {
SQLiteOpenHelper databaseHelper = new DatabaseHelper(inflater.getContext());
SQLiteDatabase db = databaseHelper.getRedableDatabase();
Cursor cursor = db.query("SALAD",
new String[] {"NAME", "IMAGE_RESOURCE_ID"},
null, null, null, null, null);
if(cursor.moveToNext()) {
String name = cursor.getString(0); //But I must have a String[] for RecyclerAdapter?
int photo = cursor.getString(0); ////But I must have a int[] for RecyclerAdapter?
}
db.close();
cursor.close();
}catch(SQLiteException e){
Toast.makeText(inflater.getContext(), "Database does not work!", Toast.LENGTHS_SHORT).show();
}
RecyclerAdapter adapter = new RecyclerAdapter(name, photo); //Here I must have String[] - name AND int[] - resource photo id?
salatkaRecyler.setAdapter(adapter);
LinearLayoutManager manager = new LinearLayoutManager(inflater.getContext(), LinearLayoutManager.VERTICAL, false);
salatkaRecyler.setLayoutManager(manager);
adapter.setListener(new CaptionedImagesAdapter.Listener() {
@Override
public void onClick(int position) {
Intent intent = new Intent(getActivity(), SalatkiDetailActivity.class);
intent.putExtra(SalatkiDetailActivity.EXTRA_SALATKI, position);
getActivity().startActivity(intent);
*/
}
});
return salatkaRecyler;
}
}
首先最好创建一个沙拉 class 来存储沙拉数据,这样应用程序的其余部分就不必处理原始字符串和整数数据
其次,您得到的是 Int 和 String 而不是这两者的数组,因为 数据库游标一次读取一行 。这是我建议你创建沙拉对象和 return em
数组的地方
List<Salad> salads = new ArrayList<>();
while(cursor.moveToNext()){
String name = cursor.getString(0);
int photo = cursor.getInt(1);
boolean isFavorite = (cursor.getInt(2) == 1);
Salad salad = new Salad(name,photo,isFavorite);
salads.add(salad);
}
并且 recyclerview 应该显示沙拉数组而不是字符串和整数数组,这样如果您需要从其他来源加载沙拉数据,您就不必重新处理它
你可以试试 skyfishjy CursorRecyclerViewAdapter。
你的RecyclerAdapter.java现在看起来像这样:
class RecyclerAdapter extends CursorRecyclerViewAdapter<MyListCursorAdapter.ViewHolder> {
// onBindViewHolder, onCreateViewHolder and Viewholder inside
}
我有一个问题,我坐了 3 天,我想不出任何东西。也就是说,我正在为一家餐厅编写一个应用程序,我有一个 SaladMeterialFragment
activity,它在 RecyclerView
中显示 CardView
。当我使用 Salad class 并从中提取数据时,一切正常。但是,我需要重写 SaladMaterialFragment
以处理从 DatabaseHelper
检索到的数据。整个问题是我不太清楚这些下载的数据是如何附加到我在 RecyclerView
下准备的适配器的。我如何从游标中检索数据并将它们保存在 String []
数组中,因为我只需要 RecyclerView
适配器?
SaladMaterialFragment
激活 SaladDetailFragment
activity,在那里我能够启动数据库并且一切正常。但是我不知道 RecyclerView
视图应该是什么样子?本人初学开发,刚学数据库,请耐心解释。预先感谢您的帮助。
回收器适配器
//我必须有一个STRING[]
和INT[]
,但是游标return String or int,那么如何从数据库中获取这种格式的数据: String[] ; int[] ?
// 我必须在这里更改我的适配器 class 中的任何内容吗?如果我想使用数据库?
import android.support.v7.widget.CardView;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;
class RecyclerAdapter extends RecyclerView.Adapter<CaptionedImagesAdapter.ViewHolder> {
private String[] captions;
private int[] imageIds;
private Listener listener;
public static interface Listener {
public void onClick(int position);
}
public static class ViewHolder extends RecyclerView.ViewHolder {
private CardView cardView;
public ViewHolder(CardView v) {
super(v);
cardView=v;
}
}
public RecyclerAdapter(String[] captions, int[] imageIds){
this.captions = captions;
this.imageIds = imageIds;
}
public void setListener(Listener listener) {
this.listener = listener;
}
@Override
public RecyclerAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
CardView cv = (CardView) LayoutInflater.from(parent.getContext())
.inflate(R.layout.card_captioned_image, parent, false);
return new ViewHolder(cv);
}
@Override
public void onBindViewHolder(ViewHolder holder, final int position) {
CardView cardView = holder.cardView;
ImageView imageView = (ImageView)cardView.findViewById(R.id.info_image);
Drawable drawable = cardView.getResources().getDrawable(imageIds[position]);
imageView.setImageDrawable(drawable);
imageView.setContentDescription(captions[position]);
TextView textView = (TextView)cardView.findViewById(R.id.info_text);
textView.setText(captions[position]);
cardView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if(listener != null) {
listener.onClick(position);
}
}
});
}
@Override
public int getItemCount() {
return captions.length;
}
}
DatabaseHelper
public class DatabaseHelper extends SQLiteOpenHelper {
private static final String DB_NAME = "miodzio";
private static final int DB_VERSION = 1;
public MiodzioDatabaseHelper(Context context) {
super(context, DB_NAME, null, DB_VERSION);
}
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL("CREATE TABLE SALAD (_id INTEGER PRIMARY KEY AUTOINCREMENT, "
+ "NAME TEXT, "
+ "IMAGE_RESOURCE_ID INTEGER, "
+ "FAVORITE INTEGER);");
insertSalad(db, "Sałatka grecka", R.drawable.salatka_grecka, 0);
insertSalatki(db, "Sałatka z grillowanym kurczakiem", R.drawable.salatka_z_kurczakiem, 0);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
}
private static void insertSalad(SQLiteDatabase db, String name, int resourceId, int favorite){
ContentValues saladValues = new ContentValues();
saladValues.put("NAME", name);
saladValues.put("IMAGE_RESOURCE_ID", resourceId);
saladValues.put("Favorite", favorite);
db.insert("SALAD", null, saladValues);
}
}
Salad.java
// 目前,SaladMaterialFragment 的数据是从这个 class 中检索的,一切正常 // public class 沙拉 {
private String name;
private int imageResourceId;
public static final Salads[] salad = {
new Salatki("Sałatka grecka", R.drawable.salatka_grecka),
new Salatki("Sałatka z grillowanym kurczakiem", R.drawable.salatka_z_kurczakiem)
};
private Salatki(String name, int imageResourceId) {
this.name = name;
this.imageResourceId = imageResourceId;
}
public String getName() {
return name;
}
public int getImageResourceId() {
return imageResourceId;
}
}
SaladDeteilActivity
import android.content.ContentValues;
import android.content.Intent;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteException;
import android.database.sqlite.SQLiteOpenHelper;
import android.os.Bundle;
import android.support.v4.view.MenuItemCompat;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.ShareActionProvider;
import android.support.v7.widget.Toolbar;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.CheckBox;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;
public class SaladDetailActivity extends AppCompatActivity {
public static final String EXTRA_SALATKI = "salatki";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_salatki_detail);
int salatki = (Integer) getIntent().getExtras().get(EXTRA_SALATKI);
/*
The old way of retrieving data is class Salad
*/
/* String salatkiName = Salatki.salatka[salatki].getName();
TextView textView = (TextView) findViewById(R.id.salatki_text);
textView.setText(salatkiName);
int salatkiImage = Salatki.salatka[salatki].getImageResourceId();
ImageView imageView = (ImageView) findViewById(R.id.salatki_image);
imageView.setImageDrawable(getResources().getDrawable(salatkiImage));
imageView.setContentDescription(salatkiName);*/
//We retrieve data from the database, everything works in this class!
try {
SQLiteOpenHelper databaseHelper = new DatabaseHelper(this);
SQLiteDatabase db = databaseHelper.getReadableDatabase();
Cursor cursor = db.query("SALAD",
new String[]{"NAME", "IMAGE_RESOURCE_ID", "FAVORITE"},
"_id = ?",
new String[]{Integer.toString(salatki)},
null, null, null);
if(cursor.moveToNext()) {
String nameText = cursor.getString(0);
int photoId = cursor.getInt(1);
boolean isFavorite = (cursor.getInt(2) == 1);
//Display name salad
TextView name = (TextView) findViewById(R.id.salatki_text);
name.setText(nameText);
//Display photo salad
ImageView photo = (ImageView) findViewById(R.id.salatki_image);
photo.setImageResource(photoId);
photo.setContentDescription(nameText);
//Check it for the favorite
CheckBox favorite = (CheckBox) findViewById(R.id.favorite);
favorite.setChecked(isFavorite);
}
cursor.close();
db.close();
}catch (SQLiteException e){
Toast.makeText(this, "Baza danych niedostępna!", Toast.LENGTH_SHORT).show();
}
// getSupportActionBar().setDisplayHomeAsUpEnabled(true); //przycisk w górę!
Toolbar myChildToolbarZupy = (Toolbar) findViewById(R.id.my_child_toolbar_salatki_detail);
setSupportActionBar(myChildToolbarZupy);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
}
}
public void onFavoriteClicked(View view) {
int salatki = (Integer) getIntent().getExtras().get(EXTRA_SALATKI);
CheckBox favorite = (CheckBox) findViewById(R.id.favorite);
ContentValues salatkiValues = new ContentValues();
salatkiValues.put("FAVORITE", favorite.isChecked());
SQLiteOpenHelper databaseHelper = new DatabaseHelper(this);
SQLiteDatabase db = databaseHelper.getWritableDatabase();
db.update("SALAD", salatkiValues,
"_id = ?", new String[]{Integer.toString(salatki)});
db.close();
}
}
SaladMaterialFragment
*
在这个 class 中,有一个问题,我的问题是如果我使用适配器和 RecyclerView 视图,如何从数据库中提取数据以显示名称和照片。有关系吗?
我需要将游标中的数据转换为String []
和int []
,但是游标没有return这些类型。*
import android.app.Fragment;
import android.content.Intent;
import android.os.Bundle;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
public class SalatkiMaterialFragment extends Fragment {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
RecyclerView salatkaRecyler = (RecyclerView) inflater.inflate(R.layout.fragment_salatki_material, container, false);
/*
At the moment data is retrieved from the Salad class, I care to be retrieved from DatabaseHelper.
*/
String[] salatkaName = new String[Salatki.salatka.length];
for(int i=0; i<salatkaName.length; i++) {
salatkaName[i] = Salatki.salatka[i].getName();
}
int[] salatkaImage = new int[Salatki.salatka.length];
for(int i=0; i<salatkaImage.length; i++) {
salatkaImage[i] = Salatki.salatka[i].getImageResourceId();
}
//This adapter adopts in the constructor type: String [] and int []
RecyclerAdapter adapter = new RecyclerAdapter(salatkaName, salatkaImage);
salatkaRecyler.setAdapter(adapter);
LinearLayoutManager manager = new LinearLayoutManager(inflater.getContext(), LinearLayoutManager.VERTICAL, false);
salatkaRecyler.setLayoutManager(manager);
adapter.setListener(new CaptionedImagesAdapter.Listener() {
@Override
public void onClick(int position) {
Intent intent = new Intent(getActivity(), SalatkiDetailActivity.class);
intent.putExtra(SalatkiDetailActivity.EXTRA_SALATKI, position);
getActivity().startActivity(intent);
/*
Here I will write my code, which I tried to prick. Of course he does not work, but maybe it will serve to better focus on what exactly I mean.
*/
/*
try {
SQLiteOpenHelper databaseHelper = new DatabaseHelper(inflater.getContext());
SQLiteDatabase db = databaseHelper.getRedableDatabase();
Cursor cursor = db.query("SALAD",
new String[] {"NAME", "IMAGE_RESOURCE_ID"},
null, null, null, null, null);
if(cursor.moveToNext()) {
String name = cursor.getString(0); //But I must have a String[] for RecyclerAdapter?
int photo = cursor.getString(0); ////But I must have a int[] for RecyclerAdapter?
}
db.close();
cursor.close();
}catch(SQLiteException e){
Toast.makeText(inflater.getContext(), "Database does not work!", Toast.LENGTHS_SHORT).show();
}
RecyclerAdapter adapter = new RecyclerAdapter(name, photo); //Here I must have String[] - name AND int[] - resource photo id?
salatkaRecyler.setAdapter(adapter);
LinearLayoutManager manager = new LinearLayoutManager(inflater.getContext(), LinearLayoutManager.VERTICAL, false);
salatkaRecyler.setLayoutManager(manager);
adapter.setListener(new CaptionedImagesAdapter.Listener() {
@Override
public void onClick(int position) {
Intent intent = new Intent(getActivity(), SalatkiDetailActivity.class);
intent.putExtra(SalatkiDetailActivity.EXTRA_SALATKI, position);
getActivity().startActivity(intent);
*/
}
});
return salatkaRecyler;
}
}
首先最好创建一个沙拉 class 来存储沙拉数据,这样应用程序的其余部分就不必处理原始字符串和整数数据
其次,您得到的是 Int 和 String 而不是这两者的数组,因为 数据库游标一次读取一行 。这是我建议你创建沙拉对象和 return em
数组的地方List<Salad> salads = new ArrayList<>();
while(cursor.moveToNext()){
String name = cursor.getString(0);
int photo = cursor.getInt(1);
boolean isFavorite = (cursor.getInt(2) == 1);
Salad salad = new Salad(name,photo,isFavorite);
salads.add(salad);
}
并且 recyclerview 应该显示沙拉数组而不是字符串和整数数组,这样如果您需要从其他来源加载沙拉数据,您就不必重新处理它
你可以试试 skyfishjy CursorRecyclerViewAdapter。
你的RecyclerAdapter.java现在看起来像这样:
class RecyclerAdapter extends CursorRecyclerViewAdapter<MyListCursorAdapter.ViewHolder> {
// onBindViewHolder, onCreateViewHolder and Viewholder inside
}