Java 如何使用SQLite在RecyclerView中动态添加按钮
我目前正在开发一个库存应用程序,它使用RecyclerView在网格中显示项目。我的应用程序可以在RecyclerView中添加新项目,并保留按钮 但是,我目前正在使用带有ArrayList的适配器来保持这些按钮在RecyclerView中正确显示。我想实现一个SQlite数据库来保存用户输入的值,并在添加新的回收项目时显示这些值 在研究这个问题时,似乎没有使用arraylist。因此,我的按钮无法显示。有没有一种方法可以实现SQlite数据库,同时保留我的ArrayList 这是我的主要活动:Java 如何使用SQLite在RecyclerView中动态添加按钮,java,sqlite,android-studio,Java,Sqlite,Android Studio,我目前正在开发一个库存应用程序,它使用RecyclerView在网格中显示项目。我的应用程序可以在RecyclerView中添加新项目,并保留按钮 但是,我目前正在使用带有ArrayList的适配器来保持这些按钮在RecyclerView中正确显示。我想实现一个SQlite数据库来保存用户输入的值,并在添加新的回收项目时显示这些值 在研究这个问题时,似乎没有使用arraylist。因此,我的按钮无法显示。有没有一种方法可以实现SQlite数据库,同时保留我的ArrayList 这是我的主要活动:
public class DisplayInventory extends AppCompatActivity {
private ArrayList<InventoryItem> mInventoryItemList;
private RecyclerView mRecyclerView;
private RecyclerView.Adapter mAdapter;
private RecyclerView.LayoutManager mLayoutManager;
private Object Button;
public ImageButton mImageButton;
private Button mButtonAdd;
private Button mButtonDelete;
private EditText mEditTextInsert;
private EditText mEditTextRemove;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_display_inventory);
createExampleList();
buildRecyclerView();
mRecyclerView = findViewById(R.id.gridView);
mButtonAdd = findViewById(R.id.button_add);
mButtonDelete = findViewById(R.id.button_delete);
mEditTextRemove = findViewById(R.id.edittext_remove);
mImageButton = findViewById(R.id.Image);
mButtonAdd.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
int position = 0;
insertItem(position);
}
});
mButtonDelete.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
int position = Integer.parseInt(mEditTextRemove.getText().toString());
removeItem(position);
}
});
}
public void insertItem(int position) {
mInventoryItemList.add(position, new InventoryItem(R.drawable.ic_delete, "Tap to Edit", "Items: ", (android.widget.Button) Button, (android.widget.Button) Button));
mAdapter.notifyItemInserted(position);
}
public void removeItem(int position) {
mInventoryItemList.remove(position);
mAdapter.notifyItemRemoved(position);
}
public void createExampleList() {
mInventoryItemList = new ArrayList<>();
mInventoryItemList.add(new InventoryItem(R.drawable.ic_delete, "Tap to Edit ", "Items: ", (android.widget.Button) Button, (android.widget.Button) Button));
mInventoryItemList.add(new InventoryItem(R.drawable.ic_delete, "Tap to Edit ", "Items: ", (android.widget.Button) Button, (android.widget.Button) Button));
mInventoryItemList.add(new InventoryItem(R.drawable.ic_delete, "Tap to Edit ", "Items: ", (android.widget.Button) Button, (android.widget.Button) Button));
}
public void buildRecyclerView() {
mRecyclerView = findViewById(R.id.gridView);
mLayoutManager = new LinearLayoutManager(this);
mAdapter = new Adapter(mInventoryItemList);
mRecyclerView.setHasFixedSize(true);
mRecyclerView.setLayoutManager(mLayoutManager);
mRecyclerView.setAdapter(mAdapter);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.menu, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch(item.getItemId()) {
case R.id.item1:
Toast.makeText(this, "Notifications Selected", Toast.LENGTH_SHORT).show();
Intent intent = new Intent(this, UserPermission.class);
startActivity(intent);
return true;
case R.id.item2:
Toast.makeText(this, "Help Selected", Toast.LENGTH_SHORT).show();
return true;
case R.id.subItem1:
Toast.makeText(this, "Sorry, No Information at this time. Work in Progress", Toast.LENGTH_SHORT).show();
return true;
case R.id.subItem2:
Toast.makeText(this, "The Amazing Zane Created this app!", Toast.LENGTH_SHORT).show();
return true;
default:
return super.onOptionsItemSelected(item);
}
}
public void AddPressed(View view) {
//Function will be added later
Toast.makeText(this, "Add Button Pressed", Toast.LENGTH_SHORT).show();
}
public void DeletePressed(View view) {
//Function will be added later
Toast.makeText(this, "Delete Button Pressed", Toast.LENGTH_SHORT).show();
}
public class Adapter extends RecyclerView.Adapter<Adapter.ViewHolder> {
private ArrayList<InventoryItem> mInventoryItems;
public static class ViewHolder extends RecyclerView.ViewHolder {
public ImageButton mImageButton;
public TextView mItemName;
public TextView mItemOwner;
public TextView mNumberItem;
public Button mPlusButton;
public Button mMinusButton;
public int numItems = 0;
public ViewHolder(@NonNull View itemView) {
super(itemView);
mImageButton = itemView.findViewById(R.id.Image);
mItemName = itemView.findViewById(R.id.itemName);
mNumberItem = itemView.findViewById(R.id.numberOfItems);
mItemOwner = itemView.findViewById(R.id.itemOwner);
itemView.findViewById(R.id.plusButton).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
int totalItems = ++numItems;
mNumberItem.setText("Items: " + totalItems);
}
});
itemView.findViewById(R.id.minusButton).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if (numItems > 0) {
int totalItems = --numItems;
mNumberItem.setText("Items: " + totalItems);
}
}
});
}
}
public Adapter(ArrayList<InventoryItem> inventoryItem) {
mInventoryItems = inventoryItem;
}
@NonNull
@Override
public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View layout = LayoutInflater.from(parent.getContext()).inflate(R.layout.item, parent, false);
ViewHolder VH = new ViewHolder(layout);
return VH;
}
@Override
public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
InventoryItem currentItem = mInventoryItems.get(position);
holder.mImageButton.setImageResource(currentItem.getImageResource());
holder.mItemName.setText(currentItem.getItemName());
holder.mNumberItem.setText(currentItem.getNumberItem());
}
@Override
public int getItemCount() {
return mInventoryItems.size();
}
public InventoryItem(int imageResource, String ItemName, String NumberItem, Button plusButton, Button minusButton) {
mImageButton = imageResource;
mItemName = ItemName;
mNumberItem = NumberItem;
mPlusButton = plusButton;
mMinusButton = minusButton;
}
public int getImageResource() {
return mImageButton;
}
public String getItemName() {
return mItemName;
}
public String getNumberItem() {
return mNumberItem;
}
public Button getPlusButton() {
return mPlusButton;
}
public Button getMinusButton() {
return mMinusButton;
}
public class InventoryDBHelper extends SQLiteOpenHelper {
private Context context;
private static final String DATABASE_NAME = "InventoryList.db";
private static final int DATABASE_VERSION = 1;
private static final String TABLE_NAME = "my_inventory";
private static final String COLUMN_ID = "_id";
private static final String COLUMN_TITLE = "item_name";
private static final String COLUMN_OWNER = "item_owner";
private static final String COLUMN_ITEMNUMBER = "number_items";
public InventoryDBHelper(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
this.context = context;
}
@Override
public void onCreate(SQLiteDatabase sqLiteDatabase) {
String query = "CREATE TABLE " + TABLE_NAME +
" (" + COLUMN_ID + " INTEGER PRIMARY KEY AUTOINCREMENT," +
COLUMN_TITLE + " TEXT, " +
COLUMN_OWNER + " TEXT, " +
COLUMN_ITEMNUMBER + " INTEGER);";
sqLiteDatabase.execSQL(query);
}
@Override
public void onUpgrade(SQLiteDatabase sqLiteDatabase, int i, int i1) {
sqLiteDatabase.execSQL("DROP TABLE IF EXISTS " + TABLE_NAME);
onCreate(sqLiteDatabase);
}
void addItem(String title, String owner, int numItem) {
SQLiteDatabase db = this.getWritableDatabase();
ContentValues cv = new ContentValues();
cv.put(COLUMN_TITLE, title);
cv.put(COLUMN_OWNER, owner);
cv.put(COLUMN_ITEMNUMBER, numItem);
long result = db.insert(TABLE_NAME, null, cv);
if(result == -1) {
Toast.makeText(context, "FAILED", Toast.LENGTH_SHORT).show();
}
else {
Toast.makeText(context, "Added Successful", Toast.LENGTH_SHORT).show();
}
}
Cursor readAllData() {
String query = "SELECT * FROM " + TABLE_NAME;
SQLiteDatabase db = this.getReadableDatabase();
Cursor cursor = null;
if(db != null) {
cursor = db.rawQuery(query, null);
}
return cursor;
}
}
这是我的数据库:
public class DisplayInventory extends AppCompatActivity {
private ArrayList<InventoryItem> mInventoryItemList;
private RecyclerView mRecyclerView;
private RecyclerView.Adapter mAdapter;
private RecyclerView.LayoutManager mLayoutManager;
private Object Button;
public ImageButton mImageButton;
private Button mButtonAdd;
private Button mButtonDelete;
private EditText mEditTextInsert;
private EditText mEditTextRemove;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_display_inventory);
createExampleList();
buildRecyclerView();
mRecyclerView = findViewById(R.id.gridView);
mButtonAdd = findViewById(R.id.button_add);
mButtonDelete = findViewById(R.id.button_delete);
mEditTextRemove = findViewById(R.id.edittext_remove);
mImageButton = findViewById(R.id.Image);
mButtonAdd.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
int position = 0;
insertItem(position);
}
});
mButtonDelete.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
int position = Integer.parseInt(mEditTextRemove.getText().toString());
removeItem(position);
}
});
}
public void insertItem(int position) {
mInventoryItemList.add(position, new InventoryItem(R.drawable.ic_delete, "Tap to Edit", "Items: ", (android.widget.Button) Button, (android.widget.Button) Button));
mAdapter.notifyItemInserted(position);
}
public void removeItem(int position) {
mInventoryItemList.remove(position);
mAdapter.notifyItemRemoved(position);
}
public void createExampleList() {
mInventoryItemList = new ArrayList<>();
mInventoryItemList.add(new InventoryItem(R.drawable.ic_delete, "Tap to Edit ", "Items: ", (android.widget.Button) Button, (android.widget.Button) Button));
mInventoryItemList.add(new InventoryItem(R.drawable.ic_delete, "Tap to Edit ", "Items: ", (android.widget.Button) Button, (android.widget.Button) Button));
mInventoryItemList.add(new InventoryItem(R.drawable.ic_delete, "Tap to Edit ", "Items: ", (android.widget.Button) Button, (android.widget.Button) Button));
}
public void buildRecyclerView() {
mRecyclerView = findViewById(R.id.gridView);
mLayoutManager = new LinearLayoutManager(this);
mAdapter = new Adapter(mInventoryItemList);
mRecyclerView.setHasFixedSize(true);
mRecyclerView.setLayoutManager(mLayoutManager);
mRecyclerView.setAdapter(mAdapter);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.menu, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch(item.getItemId()) {
case R.id.item1:
Toast.makeText(this, "Notifications Selected", Toast.LENGTH_SHORT).show();
Intent intent = new Intent(this, UserPermission.class);
startActivity(intent);
return true;
case R.id.item2:
Toast.makeText(this, "Help Selected", Toast.LENGTH_SHORT).show();
return true;
case R.id.subItem1:
Toast.makeText(this, "Sorry, No Information at this time. Work in Progress", Toast.LENGTH_SHORT).show();
return true;
case R.id.subItem2:
Toast.makeText(this, "The Amazing Zane Created this app!", Toast.LENGTH_SHORT).show();
return true;
default:
return super.onOptionsItemSelected(item);
}
}
public void AddPressed(View view) {
//Function will be added later
Toast.makeText(this, "Add Button Pressed", Toast.LENGTH_SHORT).show();
}
public void DeletePressed(View view) {
//Function will be added later
Toast.makeText(this, "Delete Button Pressed", Toast.LENGTH_SHORT).show();
}
public class Adapter extends RecyclerView.Adapter<Adapter.ViewHolder> {
private ArrayList<InventoryItem> mInventoryItems;
public static class ViewHolder extends RecyclerView.ViewHolder {
public ImageButton mImageButton;
public TextView mItemName;
public TextView mItemOwner;
public TextView mNumberItem;
public Button mPlusButton;
public Button mMinusButton;
public int numItems = 0;
public ViewHolder(@NonNull View itemView) {
super(itemView);
mImageButton = itemView.findViewById(R.id.Image);
mItemName = itemView.findViewById(R.id.itemName);
mNumberItem = itemView.findViewById(R.id.numberOfItems);
mItemOwner = itemView.findViewById(R.id.itemOwner);
itemView.findViewById(R.id.plusButton).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
int totalItems = ++numItems;
mNumberItem.setText("Items: " + totalItems);
}
});
itemView.findViewById(R.id.minusButton).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if (numItems > 0) {
int totalItems = --numItems;
mNumberItem.setText("Items: " + totalItems);
}
}
});
}
}
public Adapter(ArrayList<InventoryItem> inventoryItem) {
mInventoryItems = inventoryItem;
}
@NonNull
@Override
public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View layout = LayoutInflater.from(parent.getContext()).inflate(R.layout.item, parent, false);
ViewHolder VH = new ViewHolder(layout);
return VH;
}
@Override
public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
InventoryItem currentItem = mInventoryItems.get(position);
holder.mImageButton.setImageResource(currentItem.getImageResource());
holder.mItemName.setText(currentItem.getItemName());
holder.mNumberItem.setText(currentItem.getNumberItem());
}
@Override
public int getItemCount() {
return mInventoryItems.size();
}
public InventoryItem(int imageResource, String ItemName, String NumberItem, Button plusButton, Button minusButton) {
mImageButton = imageResource;
mItemName = ItemName;
mNumberItem = NumberItem;
mPlusButton = plusButton;
mMinusButton = minusButton;
}
public int getImageResource() {
return mImageButton;
}
public String getItemName() {
return mItemName;
}
public String getNumberItem() {
return mNumberItem;
}
public Button getPlusButton() {
return mPlusButton;
}
public Button getMinusButton() {
return mMinusButton;
}
public class InventoryDBHelper extends SQLiteOpenHelper {
private Context context;
private static final String DATABASE_NAME = "InventoryList.db";
private static final int DATABASE_VERSION = 1;
private static final String TABLE_NAME = "my_inventory";
private static final String COLUMN_ID = "_id";
private static final String COLUMN_TITLE = "item_name";
private static final String COLUMN_OWNER = "item_owner";
private static final String COLUMN_ITEMNUMBER = "number_items";
public InventoryDBHelper(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
this.context = context;
}
@Override
public void onCreate(SQLiteDatabase sqLiteDatabase) {
String query = "CREATE TABLE " + TABLE_NAME +
" (" + COLUMN_ID + " INTEGER PRIMARY KEY AUTOINCREMENT," +
COLUMN_TITLE + " TEXT, " +
COLUMN_OWNER + " TEXT, " +
COLUMN_ITEMNUMBER + " INTEGER);";
sqLiteDatabase.execSQL(query);
}
@Override
public void onUpgrade(SQLiteDatabase sqLiteDatabase, int i, int i1) {
sqLiteDatabase.execSQL("DROP TABLE IF EXISTS " + TABLE_NAME);
onCreate(sqLiteDatabase);
}
void addItem(String title, String owner, int numItem) {
SQLiteDatabase db = this.getWritableDatabase();
ContentValues cv = new ContentValues();
cv.put(COLUMN_TITLE, title);
cv.put(COLUMN_OWNER, owner);
cv.put(COLUMN_ITEMNUMBER, numItem);
long result = db.insert(TABLE_NAME, null, cv);
if(result == -1) {
Toast.makeText(context, "FAILED", Toast.LENGTH_SHORT).show();
}
else {
Toast.makeText(context, "Added Successful", Toast.LENGTH_SHORT).show();
}
}
Cursor readAllData() {
String query = "SELECT * FROM " + TABLE_NAME;
SQLiteDatabase db = this.getReadableDatabase();
Cursor cursor = null;
if(db != null) {
cursor = db.rawQuery(query, null);
}
return cursor;
}
}