Когда я нажимаю на «Карточку», цвет иногда меняется, а иногда нет. Часто случается, что изменившийся цвет не сохраняется. Я хочу создать что-то вроде страницы уведомлений Facebook, где мы узнаем об уведомлениях о прочтении по измененному цвету карты. Но есть некоторая проблема с моим классом адаптера. Пожалуйста, помогите мне.
Я пытался сохранить состояния цвета в общих настройках, но желаемый результат не был достигнут. Я думаю, что проблема должна быть в моей логике переключения. У меня нет профессионального опыта программирования под Android. Пожалуйста, помогите мне. Мое приложение находится на финальной стадии.
public class PyqAdapter extends RecyclerView.Adapter {
private final Context mCtx;
private final List pyqModelList;
private final int defaultBackgroundColor;
private final int selectedBackgroundColor;
private final Set selectedPositions;
private static final String PREFS_NAME = "PyqAllItems";
private static final String SELECTED_ITEMS_KEY = "PyqSelectedItems";
public PyqAdapter(Context mCtx, List pyqModelList) {
if (mCtx == null) {
throw new IllegalArgumentException("Context cannot be null");
}
this.mCtx = mCtx;
this.pyqModelList = pyqModelList;
this.selectedPositions = new HashSet();
// Load colors based on the current theme
Resources res = mCtx.getResources();
int nightModeFlags = res.getConfiguration().uiMode & Configuration.UI_MODE_NIGHT_MASK;
if (nightModeFlags == Configuration.UI_MODE_NIGHT_YES) {
defaultBackgroundColor = ContextCompat.getColor(mCtx, R.color.defaultBackgroundDark);
selectedBackgroundColor = ContextCompat.getColor(mCtx, R.color.selectedBackgroundDark);
} else {
defaultBackgroundColor = ContextCompat.getColor(mCtx, R.color.defaultBackgroundLight);
selectedBackgroundColor = ContextCompat.getColor(mCtx, R.color.selectedBackgroundLight);
}
// Load selected states from SharedPreferences
SharedPreferences prefs = mCtx.getSharedPreferences(PREFS_NAME, Context.MODE_PRIVATE);
Set selectedItems = prefs.getStringSet(SELECTED_ITEMS_KEY, new HashSet());
for (String position : selectedItems) {
selectedPositions.add(Integer.parseInt(position));
}
// Set selection state on models based on loaded positions
for (int i = 0; i < pyqModelList.size(); i++) {
PyqModel model = pyqModelList.get(i);
model.setSelected(selectedPositions.contains(i));
}
}
@NonNull
@Override
public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
LayoutInflater inflater = LayoutInflater.from(parent.getContext());
View view = inflater.inflate(R.layout.pyq_rv_layout, parent, false);
return new ViewHolder(view);
}
@Override
public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
final PyqModel temp = pyqModelList.get(position);
// Set text views
holder.textView.setText(temp.getPdfName());
holder.serialNumber.setText(String.valueOf(position + 1));
holder.pyqTopics.setText(temp.getPyqTopics());
// Use holder.getAdapterPosition() to get the current position
int adapterPosition = holder.getAdapterPosition();
if (adapterPosition == RecyclerView.NO_POSITION) {
return;
}
// Set background color based on selection state
if (temp.isSelected()) {
holder.cardView.setCardBackgroundColor(selectedBackgroundColor);
} else {
holder.cardView.setCardBackgroundColor(defaultBackgroundColor);
}
holder.cardView.setOnClickListener(v -> {
SharedPreferences prefs = mCtx.getSharedPreferences(PREFS_NAME, Context.MODE_PRIVATE);
SharedPreferences.Editor editor = prefs.edit();
Set selectedItems = new HashSet();
for (int pos : selectedPositions) {
selectedItems.add(String.valueOf(pos));
}
selectedPositions.add(adapterPosition);
editor.putStringSet(SELECTED_ITEMS_KEY, selectedItems);
// Notify adapter to refresh views
notifyItemChanged(adapterPosition);
editor.apply();
// Launch ViewPdf activity
Intent i = new Intent(holder.cardView.getContext(), ViewPdf.class);
i.putExtra("pdfName", temp.getPdfName());
i.putExtra("pdfUrl", temp.getPdfUri());
i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
holder.cardView.getContext().startActivity(i);
});
}
@Override
public int getItemCount() {
return pyqModelList.size();
}
public static class ViewHolder extends RecyclerView.ViewHolder {
CardView cardView;
TextView textView, serialNumber, pyqTopics;
public ViewHolder(View itemView) {
super(itemView);
cardView = itemView.findViewById(R.id.pyqCardView);
textView = itemView.findViewById(R.id.pyqTitle);
serialNumber = itemView.findViewById(R.id.serialNumber);
pyqTopics = itemView.findViewById(R.id.pyqTopics);
}
}
}
Подробнее здесь: https://stackoverflow.com/questions/788 ... r-change-p
Как я могу изменить цвет фона представления карты при нажатии и сохранить изменение цвета постоянным? ⇐ JAVA
Программисты JAVA общаются здесь
1722418959
Anonymous
Когда я нажимаю на «Карточку», цвет иногда меняется, а иногда нет. Часто случается, что изменившийся цвет не сохраняется. Я хочу создать что-то вроде страницы уведомлений Facebook, где мы узнаем об уведомлениях о прочтении по измененному цвету карты. Но есть некоторая проблема с моим классом адаптера. Пожалуйста, помогите мне.
Я пытался сохранить состояния цвета в общих настройках, но желаемый результат не был достигнут. Я думаю, что проблема должна быть в моей логике переключения. У меня нет профессионального опыта программирования под Android. Пожалуйста, помогите мне. Мое приложение находится на финальной стадии.
public class PyqAdapter extends RecyclerView.Adapter {
private final Context mCtx;
private final List pyqModelList;
private final int defaultBackgroundColor;
private final int selectedBackgroundColor;
private final Set selectedPositions;
private static final String PREFS_NAME = "PyqAllItems";
private static final String SELECTED_ITEMS_KEY = "PyqSelectedItems";
public PyqAdapter(Context mCtx, List pyqModelList) {
if (mCtx == null) {
throw new IllegalArgumentException("Context cannot be null");
}
this.mCtx = mCtx;
this.pyqModelList = pyqModelList;
this.selectedPositions = new HashSet();
// Load colors based on the current theme
Resources res = mCtx.getResources();
int nightModeFlags = res.getConfiguration().uiMode & Configuration.UI_MODE_NIGHT_MASK;
if (nightModeFlags == Configuration.UI_MODE_NIGHT_YES) {
defaultBackgroundColor = ContextCompat.getColor(mCtx, R.color.defaultBackgroundDark);
selectedBackgroundColor = ContextCompat.getColor(mCtx, R.color.selectedBackgroundDark);
} else {
defaultBackgroundColor = ContextCompat.getColor(mCtx, R.color.defaultBackgroundLight);
selectedBackgroundColor = ContextCompat.getColor(mCtx, R.color.selectedBackgroundLight);
}
// Load selected states from SharedPreferences
SharedPreferences prefs = mCtx.getSharedPreferences(PREFS_NAME, Context.MODE_PRIVATE);
Set selectedItems = prefs.getStringSet(SELECTED_ITEMS_KEY, new HashSet());
for (String position : selectedItems) {
selectedPositions.add(Integer.parseInt(position));
}
// Set selection state on models based on loaded positions
for (int i = 0; i < pyqModelList.size(); i++) {
PyqModel model = pyqModelList.get(i);
model.setSelected(selectedPositions.contains(i));
}
}
@NonNull
@Override
public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
LayoutInflater inflater = LayoutInflater.from(parent.getContext());
View view = inflater.inflate(R.layout.pyq_rv_layout, parent, false);
return new ViewHolder(view);
}
@Override
public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
final PyqModel temp = pyqModelList.get(position);
// Set text views
holder.textView.setText(temp.getPdfName());
holder.serialNumber.setText(String.valueOf(position + 1));
holder.pyqTopics.setText(temp.getPyqTopics());
// Use holder.getAdapterPosition() to get the current position
int adapterPosition = holder.getAdapterPosition();
if (adapterPosition == RecyclerView.NO_POSITION) {
return;
}
// Set background color based on selection state
if (temp.isSelected()) {
holder.cardView.setCardBackgroundColor(selectedBackgroundColor);
} else {
holder.cardView.setCardBackgroundColor(defaultBackgroundColor);
}
holder.cardView.setOnClickListener(v -> {
SharedPreferences prefs = mCtx.getSharedPreferences(PREFS_NAME, Context.MODE_PRIVATE);
SharedPreferences.Editor editor = prefs.edit();
Set selectedItems = new HashSet();
for (int pos : selectedPositions) {
selectedItems.add(String.valueOf(pos));
}
selectedPositions.add(adapterPosition);
editor.putStringSet(SELECTED_ITEMS_KEY, selectedItems);
// Notify adapter to refresh views
notifyItemChanged(adapterPosition);
editor.apply();
// Launch ViewPdf activity
Intent i = new Intent(holder.cardView.getContext(), ViewPdf.class);
i.putExtra("pdfName", temp.getPdfName());
i.putExtra("pdfUrl", temp.getPdfUri());
i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
holder.cardView.getContext().startActivity(i);
});
}
@Override
public int getItemCount() {
return pyqModelList.size();
}
public static class ViewHolder extends RecyclerView.ViewHolder {
CardView cardView;
TextView textView, serialNumber, pyqTopics;
public ViewHolder(View itemView) {
super(itemView);
cardView = itemView.findViewById(R.id.pyqCardView);
textView = itemView.findViewById(R.id.pyqTitle);
serialNumber = itemView.findViewById(R.id.serialNumber);
pyqTopics = itemView.findViewById(R.id.pyqTopics);
}
}
}
Подробнее здесь: [url]https://stackoverflow.com/questions/78814313/how-can-i-change-card-view-background-color-on-click-and-keep-the-color-change-p[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия