簡體   English   中英

為什么我的 onBindViewHolder () 根本沒有運行,即使我的所有其他回收器視圖方法都運行了?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM