Когда я нажимаю на «Карточку», цвет иногда меняется, а иногда нет. Часто случается, что изменившийся цвет не сохраняется. Я хочу создать что-то вроде страницы уведомлений 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
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение