![](/img/trans.png)
[英]Recycler view shows only first item, even though onBindViewHolder and onCreateViewHolder run for all of them
[英]Why does my onBindViewHolder () not run at all even though all my other recycler view methods run?
我創建了一個recycler view
,它應該在文本視圖和圖像視圖中顯示數據。 但是我的適配器的onBindViewHolder ()
沒有運行。 我的適配器中的所有其他方法都運行。 我找不到onBindViewHolder ()
不運行的原因,其他一切似乎都工作正常,只是我的數據沒有顯示在我的回收站視圖的卡片視圖中。 任何幫助將不勝感激。
適配器代碼:
package com.myapps.myapplication;
import android.content.Context;
import android.database.Cursor;
import android.graphics.Bitmap;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;
import androidx.recyclerview.widget.RecyclerView;
import androidx.cardview.widget.CardView;
public class captionedImagesAdapter extends RecyclerView.Adapter <captionedImagesAdapter.ViewHolder> {
private Context context;
private Cursor cursor;
public captionedImagesAdapter (Context context, Cursor cursor) {
this.context = context;
this.cursor = cursor;
}
public captionedImagesAdapter.ViewHolder onCreateViewHolder (ViewGroup parent, int viewType) {
LayoutInflater inflater = LayoutInflater.from(context);
CardView cv = (CardView) inflater.inflate(R.layout.card_view, parent, false);
return new ViewHolder (cv);
}
public void onBindViewHolder(ViewHolder holder, int position) {
if (cursor.moveToPosition(position)) {
return;
}
String info_text = cursor.getString (0);
byte [] info_image = cursor.getBlob(1);
Bitmap bitmap = MyDatabaseHelper.getImages(info_image);
holder.textView.setText(info_text);
holder.imageView.setImageBitmap(bitmap);
}
public int getItemCount() {
return cursor.getCount();
}
public static class ViewHolder extends RecyclerView.ViewHolder {
private ImageView imageView;
private TextView textView;
public ViewHolder(CardView view) {
super(view);
imageView = view.findViewById(R.id.info_image);
textView = view.findViewById(R.id.info_text);
}
}
}
數據庫代碼:
package com.myapps.myapplication;
import android.content.ContentValues;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.util.Log;
import java.io.ByteArrayOutputStream;
import java.util.ArrayList;
public class MyDatabaseHelper extends SQLiteOpenHelper {
private static final String DB_NAME = "starbuzz";
private static final int DB_VERSION = 5;
private Context context;
private ArrayList <Bitmap> bitmapArray;
private byte [] byteArray;
public MyDatabaseHelper(Context context) {
super(context, DB_NAME, null, DB_VERSION);
this.context = context;
}
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL("CREATE TABLE GROCERY_ITEMS (" + "_id INTEGER PRIMARY KEY AUTOINCREMENT, " + "NAME TEXT, " + "IMAGE_RESOURCE_ID BLOB);");
upgradeDatabase(db);
}
public void upgradeDatabase (SQLiteDatabase db) {
convertToBitmap();
byteArray = convertToByte();
addItems(db);
}
public void convertToBitmap () {
Bitmap faan = BitmapFactory.decodeResource(context.getResources(), R.drawable.faan);
Bitmap milk = BitmapFactory.decodeResource (context.getResources(), R.drawable.milk);
Bitmap egg = BitmapFactory.decodeResource (context.getResources(), R.drawable.egg);
Bitmap toilet_tissue = BitmapFactory.decodeResource (context.getResources(), R.drawable.toilet_tissue);
Bitmap kitchen_tissue = BitmapFactory.decodeResource (context.getResources(), R.drawable.kitchen_tissue);
Bitmap bread = BitmapFactory.decodeResource (context.getResources(), R.drawable.bread);
Bitmap potatoe = BitmapFactory.decodeResource (context.getResources(), R.drawable.potatoe);
Bitmap onion = BitmapFactory.decodeResource (context.getResources(), R.drawable.onion);
Bitmap flour = BitmapFactory.decodeResource (context.getResources(), R.drawable.flour);
Bitmap tomatoe = BitmapFactory.decodeResource (context.getResources(), R.drawable.tomatoe);
Bitmap corriandor = BitmapFactory.decodeResource (context.getResources(), R.drawable.corriandor);
bitmapArray = new ArrayList <Bitmap> ();
bitmapArray.add(faan);
bitmapArray.add (milk);
bitmapArray.add (egg);
bitmapArray.add (toilet_tissue);
bitmapArray.add (kitchen_tissue);
bitmapArray.add (bread);
bitmapArray.add (potatoe);
bitmapArray.add (onion);
bitmapArray.add (flour);
bitmapArray.add (tomatoe);
bitmapArray.add (corriandor);
}
public byte [] convertToByte () {
ByteArrayOutputStream stream = new ByteArrayOutputStream ();
for (Bitmap bitmap : bitmapArray) {
bitmap.compress (Bitmap.CompressFormat.PNG, 0, stream);
}
return stream.toByteArray();
}
public static Bitmap getImages (byte [] image) {
return BitmapFactory.decodeByteArray(image, 0, image.length);
}
public void addItems (SQLiteDatabase db) {
byte faan = byteArray [0];
byte milk = byteArray [1];
byte egg = byteArray [2];
byte toilet_tissue = byteArray [3];
byte kitchen_tissue = byteArray [4];
byte bread = byteArray [5];
byte potatoe = byteArray [6];
byte onion = byteArray [7];
byte flour = byteArray [8];
byte tomatoe = byteArray [9];
byte corriandor = byteArray [10];
insertItems (db, "Faan", faan);
insertItems (db, "Milk", milk);
insertItems (db, "Egg", egg);
insertItems (db, "Toilet Tissue", toilet_tissue);
insertItems (db, "Kitchen Tissue", kitchen_tissue);
insertItems (db, "Bread", bread);
insertItems (db, "Potatoe", potatoe);
insertItems (db, "Onion", onion);
insertItems (db, "Flour", flour);
insertItems (db, "Tomatoe", tomatoe);
insertItems (db, "Corriandor", corriandor);
}
public void insertItems (SQLiteDatabase db, String name, byte image) {
ContentValues contentValues = new ContentValues();
contentValues.put ("NAME", name);
contentValues.put ("IMAGE_RESOURCE_ID", image);
db.insert ("GROCERY_ITEMS", null, contentValues);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
db.execSQL("CREATE TABLE GROCERY_ITEMS (" + "_id INTEGER PRIMARY KEY AUTOINCREMENT, " + "NAME TEXT, " + "IMAGE_RESOURCE_ID BLOB);");
upgradeDatabase(db);
}
}
回收站查看代碼:
package com.myapps.myapplication;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteException;
import android.os.Bundle;
import androidx.appcompat.app.AppCompatActivity;
import androidx.recyclerview.widget.GridLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
public class grocery_item extends AppCompatActivity {
SQLiteDatabase db;
Cursor cursor;
protected void onCreate (Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.item_grocery);
accessDataBase();
RecyclerView groceryRecycler = (RecyclerView) findViewById(R.id.grocery_recycler_view);
captionedImagesAdapter adapter = new captionedImagesAdapter (this, cursor);
GridLayoutManager layoutManager = new GridLayoutManager(this, 2, GridLayoutManager.VERTICAL, false);
groceryRecycler.setLayoutManager(layoutManager);
groceryRecycler.setAdapter (adapter);
}
public void accessDataBase () {
MyDatabaseHelper databaseHelper = new MyDatabaseHelper(this);
try {
db = databaseHelper.getReadableDatabase();
cursor = db.query ("GROCERY_ITEMS", new String[] {"NAME", "IMAGE_RESOURCE_ID"}, null, null, null, null, null);
} catch (SQLiteException e) {
e.printStackTrace();
}
}
}
您將立即從onBindViewHolder()
返回:
if (cursor.moveToPosition(position)) { return; }
moveToPosition()
成功時返回 true。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.