Несколько дней назад у меня не было этой проблемы, я мог добавить новые записи в базу данных/список блюд, и они будут добавлены в список уже созданных блюд. Долгое время у меня были проблемы с удалением из списка, но когда я наконец заставил кнопку удаления работать, я понял, что больше не могу добавлять в список. Или вот как это выглядит. Когда я проверил базу данных в файле sql, который я скачал из данных, он показал, что каждый новый ввод все еще обновляется в базе данных. Но в настоящее время RecyclerView показывает только пустой экран. Можете ли вы помочь мне диагностировать проблему?
Я пробовал разные варианты notifyDataSetChange() в своем адаптере, но это все равно не помогло. Я думал, что если данные обновляются, они должны отображаться в списке, но, видимо, нет.
Я считаю, что проблема в моей основной активности или адаптере номинального блюда
Это мой MainActivity.java:
package com.example.restaurantrater;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
import androidx.appcompat.app.AppCompatActivity;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import java.util.ArrayList;
public class MainActivity extends AppCompatActivity {
EditText Restaurant_name;
EditText Restaurant_address;
Button save_btn;
private RestaurantDBhelper dbHelper;
private RecyclerView recyclerView;
private RatedDishAdapter adapter;
private static int restIDcount = 0;
private ArrayList ratedDishes;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
dbHelper = new RestaurantDBhelper(this);
Restaurant_name = findViewById(R.id.restaurant_name);
Restaurant_address = findViewById(R.id.streetaddress);
save_btn = findViewById(R.id.save_dish);
save_btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
String nrestaurant_n = Restaurant_name.getText().toString();
String nrestaurant_a = Restaurant_address.getText().toString();
restIDcount++;
// Insert restaurant details into the database
long result = dbHelper.insertRestaurant(nrestaurant_n, nrestaurant_a);
if (result != -1) {
// Restaurant inserted successfully, navigate to DishRater
Intent intent = new Intent(MainActivity.this, DishRater.class);
intent.putExtra("restaurantid", restIDcount);
startActivity(intent);
} else {
// Failed to insert restaurant
// Handle error, show toast or log error
}
}
});
// RecyclerView setup
recyclerView = findViewById(R.id.recyclerView);
recyclerView.setLayoutManager(new LinearLayoutManager(this));
// Initialize adapter for RecyclerView
ratedDishes = new ArrayList();
adapter = new RatedDishAdapter(ratedDishes, this);
recyclerView.setAdapter(adapter);
// Set up click listener for delete actions in the adapter
adapter.setOnItemClickListener(new RatedDishAdapter.OnItemClickListener() {
@Override
public void onItemClick(int position) {
// Handle item click if needed
}
@Override
public void onDeleteClick(int position) {
RatedDish deletedDish = ratedDishes.get(position);
boolean isDeleted = dbHelper.deleteDish(deletedDish.getId());
if (isDeleted) {
Toast.makeText(MainActivity.this, "Dish deleted successfully", Toast.LENGTH_SHORT).show();
// Remove the deleted item from the RecyclerView
ratedDishes.remove(position);
adapter.notifyItemRemoved(position);
} else {
Toast.makeText(MainActivity.this, "Failed to delete dish", Toast.LENGTH_SHORT).show();
}
}
});
}
@Override
protected void onResume() {
super.onResume();
// Retrieve list of rated meals from the database
retrieveRatedDishesFromDatabase();
// Update the adapter with the new list of rated dishes
adapter.updateData(ratedDishes);
}
private void retrieveRatedDishesFromDatabase() {
// Call getAllRatedDishes() method from RestaurantDBhelper
ratedDishes.clear();
ratedDishes.addAll(dbHelper.getAllRatedDishes());
adapter.updateData(ratedDishes);
}
}
This is my RatedDishAdapter.java: package com.example.restaurantrater;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;
import java.util.ArrayList;
public class RatedDishAdapter extends RecyclerView.Adapter {
private ArrayList ratedDishes;
private OnItemClickListener clickListener; // Define listener
private Context context; // Add context field
private RestaurantDBhelper dbHelper; // Add dbHelper field
public RatedDishAdapter(ArrayList ratedDishes, Context context) {
this.ratedDishes = ratedDishes;
this.context = context; // Initialize context
this.dbHelper = new RestaurantDBhelper(context); // Initialize dbHelper
}
public interface OnItemClickListener {
void onItemClick(int position);
void onDeleteClick(int position);
}
public void setOnItemClickListener(OnItemClickListener listener) {
this.clickListener = listener;
}
@NonNull
@Override
public RatedDishViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View itemView = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_rated_dish, parent, false);
return new RatedDishViewHolder(itemView);
}
@Override
public void onBindViewHolder(@NonNull RatedDishViewHolder holder, int position) {
RatedDish ratedDish = ratedDishes.get(position);
holder.textDishName.setText(ratedDish.getName());
holder.textRating.setText(String.valueOf(ratedDish.getRating()));
// Set click listener for the delete button
holder.deleteButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if (clickListener != null) {
int position = holder.getAdapterPosition();
if (position != RecyclerView.NO_POSITION) {
clickListener.onDeleteClick(position);
}
}
}
});
}
@Override
public int getItemCount() {
return ratedDishes.size();
}
public class RatedDishViewHolder extends RecyclerView.ViewHolder {
public TextView textDishName;
public TextView textRating;
public Button deleteButton;
public RatedDishViewHolder(@NonNull View itemView) {
super(itemView);
textDishName = itemView.findViewById(R.id.textViewDishName);
textRating = itemView.findViewById(R.id.textViewRating);
deleteButton = itemView.findViewById(R.id.buttonDelete);
// Set click listener for the delete button
deleteButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if (clickListener != null) {
int position = getAdapterPosition();
if (position != RecyclerView.NO_POSITION) {
clickListener.onDeleteClick(position);
}
}
}
});
// Set click listener on the item view
itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (clickListener != null) {
int position = getAdapterPosition();
if (position != RecyclerView.NO_POSITION) {
clickListener.onItemClick(position);
}
}
}
});
}
}
// Update the data in the adapter
public void updateData(ArrayList newData) {
ratedDishes.clear();
ratedDishes.addAll(newData);
notifyDataSetChanged();
}
}
Подробнее здесь: https://stackoverflow.com/questions/781 ... cyclerview
База данных не отображается в RecyclerView ⇐ JAVA
Программисты JAVA общаются здесь
1710826675
Гость
Несколько дней назад у меня не было этой проблемы, я мог добавить новые записи в базу данных/список блюд, и они будут добавлены в список уже созданных блюд. Долгое время у меня были проблемы с удалением из списка, но когда я наконец заставил кнопку удаления работать, я понял, что больше не могу добавлять в список. Или вот как это выглядит. Когда я проверил базу данных в файле sql, который я скачал из данных, он показал, что каждый новый ввод все еще обновляется в базе данных. Но в настоящее время RecyclerView показывает только пустой экран. Можете ли вы помочь мне диагностировать проблему?
Я пробовал разные варианты notifyDataSetChange() в своем адаптере, но это все равно не помогло. Я думал, что если данные обновляются, они должны отображаться в списке, но, видимо, нет.
Я считаю, что проблема в моей основной активности или адаптере номинального блюда
Это мой MainActivity.java:
package com.example.restaurantrater;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
import androidx.appcompat.app.AppCompatActivity;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import java.util.ArrayList;
public class MainActivity extends AppCompatActivity {
EditText Restaurant_name;
EditText Restaurant_address;
Button save_btn;
private RestaurantDBhelper dbHelper;
private RecyclerView recyclerView;
private RatedDishAdapter adapter;
private static int restIDcount = 0;
private ArrayList ratedDishes;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
dbHelper = new RestaurantDBhelper(this);
Restaurant_name = findViewById(R.id.restaurant_name);
Restaurant_address = findViewById(R.id.streetaddress);
save_btn = findViewById(R.id.save_dish);
save_btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
String nrestaurant_n = Restaurant_name.getText().toString();
String nrestaurant_a = Restaurant_address.getText().toString();
restIDcount++;
// Insert restaurant details into the database
long result = dbHelper.insertRestaurant(nrestaurant_n, nrestaurant_a);
if (result != -1) {
// Restaurant inserted successfully, navigate to DishRater
Intent intent = new Intent(MainActivity.this, DishRater.class);
intent.putExtra("restaurantid", restIDcount);
startActivity(intent);
} else {
// Failed to insert restaurant
// Handle error, show toast or log error
}
}
});
// RecyclerView setup
recyclerView = findViewById(R.id.recyclerView);
recyclerView.setLayoutManager(new LinearLayoutManager(this));
// Initialize adapter for RecyclerView
ratedDishes = new ArrayList();
adapter = new RatedDishAdapter(ratedDishes, this);
recyclerView.setAdapter(adapter);
// Set up click listener for delete actions in the adapter
adapter.setOnItemClickListener(new RatedDishAdapter.OnItemClickListener() {
@Override
public void onItemClick(int position) {
// Handle item click if needed
}
@Override
public void onDeleteClick(int position) {
RatedDish deletedDish = ratedDishes.get(position);
boolean isDeleted = dbHelper.deleteDish(deletedDish.getId());
if (isDeleted) {
Toast.makeText(MainActivity.this, "Dish deleted successfully", Toast.LENGTH_SHORT).show();
// Remove the deleted item from the RecyclerView
ratedDishes.remove(position);
adapter.notifyItemRemoved(position);
} else {
Toast.makeText(MainActivity.this, "Failed to delete dish", Toast.LENGTH_SHORT).show();
}
}
});
}
@Override
protected void onResume() {
super.onResume();
// Retrieve list of rated meals from the database
retrieveRatedDishesFromDatabase();
// Update the adapter with the new list of rated dishes
adapter.updateData(ratedDishes);
}
private void retrieveRatedDishesFromDatabase() {
// Call getAllRatedDishes() method from RestaurantDBhelper
ratedDishes.clear();
ratedDishes.addAll(dbHelper.getAllRatedDishes());
adapter.updateData(ratedDishes);
}
}
This is my RatedDishAdapter.java: package com.example.restaurantrater;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;
import java.util.ArrayList;
public class RatedDishAdapter extends RecyclerView.Adapter {
private ArrayList ratedDishes;
private OnItemClickListener clickListener; // Define listener
private Context context; // Add context field
private RestaurantDBhelper dbHelper; // Add dbHelper field
public RatedDishAdapter(ArrayList ratedDishes, Context context) {
this.ratedDishes = ratedDishes;
this.context = context; // Initialize context
this.dbHelper = new RestaurantDBhelper(context); // Initialize dbHelper
}
public interface OnItemClickListener {
void onItemClick(int position);
void onDeleteClick(int position);
}
public void setOnItemClickListener(OnItemClickListener listener) {
this.clickListener = listener;
}
@NonNull
@Override
public RatedDishViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View itemView = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_rated_dish, parent, false);
return new RatedDishViewHolder(itemView);
}
@Override
public void onBindViewHolder(@NonNull RatedDishViewHolder holder, int position) {
RatedDish ratedDish = ratedDishes.get(position);
holder.textDishName.setText(ratedDish.getName());
holder.textRating.setText(String.valueOf(ratedDish.getRating()));
// Set click listener for the delete button
holder.deleteButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if (clickListener != null) {
int position = holder.getAdapterPosition();
if (position != RecyclerView.NO_POSITION) {
clickListener.onDeleteClick(position);
}
}
}
});
}
@Override
public int getItemCount() {
return ratedDishes.size();
}
public class RatedDishViewHolder extends RecyclerView.ViewHolder {
public TextView textDishName;
public TextView textRating;
public Button deleteButton;
public RatedDishViewHolder(@NonNull View itemView) {
super(itemView);
textDishName = itemView.findViewById(R.id.textViewDishName);
textRating = itemView.findViewById(R.id.textViewRating);
deleteButton = itemView.findViewById(R.id.buttonDelete);
// Set click listener for the delete button
deleteButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if (clickListener != null) {
int position = getAdapterPosition();
if (position != RecyclerView.NO_POSITION) {
clickListener.onDeleteClick(position);
}
}
}
});
// Set click listener on the item view
itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (clickListener != null) {
int position = getAdapterPosition();
if (position != RecyclerView.NO_POSITION) {
clickListener.onItemClick(position);
}
}
}
});
}
}
// Update the data in the adapter
public void updateData(ArrayList newData) {
ratedDishes.clear();
ratedDishes.addAll(newData);
notifyDataSetChanged();
}
}
Подробнее здесь: [url]https://stackoverflow.com/questions/78183291/database-not-showing-up-in-recyclerview[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия