У меня есть метод в моем классе NateActivity и в классе ноты. Я сталкиваюсь с некоторыми проблемами. Удалить и отменить удаление, удаленный элемент, когда он восстанавливается, изменение цвета, как это предполагалось, но элемент, который заменил удаленный элемент, теперь в его исходной позиции также подчеркнут, что он должен изменить на дефолт. Знаешь, что происходит, может кто-нибудь помочь? noteAdapter.setOnItemClickListener(new NoteAdapter.OnItemClickListener() {
@Override
public void onItemSelect(int position, timeNameViewHolder holder) {
try {
isNotifEnabled = false;
DataHolder.creatingNote = false;
current = java.util.Calendar.getInstance();
selectedPosition = position;
System.out.println("onItemSelect position: " + position);
selectedNote = noteAdapter.getCurrentNotes().get(position);
selectedNoteId = selectedNote.getNoteId();
if (DataHolder.hideEditButton != true) {
Save.setVisibility(View.VISIBLE);
Save.setText("Create");
}
noteAdapter.setSelectedPosition(position);
linearLayoutMA4.setVisibility(View.VISIBLE);
linearLayoutMA3.setVisibility(View.GONE);
toolbar.setTitle("Your Notes");
String titleEntered = selectedNote.getTitle();
String descriptionEntered = selectedNote.getDescription();
created = selectedNote.getCreatedAt();
long updated = selectedNote.getUpdatedAt();
enteredTitle.setText(titleEntered);
enteredDescription.setText(descriptionEntered);
getSetUpdated(created, updated, selectedNote);
long currenMilliTime = current.getTimeInMillis();
if (DataHolder.notificationTime(selectedNote) > currenMilliTime) {
notifiActiveOff1.setImageResource(R.drawable.notifications_active);
notificationText1.setText("Notification On");
notifiActiveOff2.setImageResource(R.drawable.notifications_active);
notificationText2.setText("Notification On");
isNotificationOn = true;
} else {
notifiActiveOff1.setImageResource(R.drawable.notifications_off);
notificationText1.setText("Notification Off");
notifiActiveOff2.setImageResource(R.drawable.notifications_off);
notificationText2.setText("Notification Off");
}
}
catch (Exception e) {
}
}
@Override
public void onEditClick(int noteId, String title, String description){
try {
isNotifEnabled = true;
DataHolder.creatingNote = false;
enterTittle.setText(title);
enterDescription.setText(description);
selectedNoteId = noteId;
Save.setText("Save");
toolbar.setTitle("Editing Notes");
isEditing = true;
linearLayoutMA4.setVisibility(View.GONE);
linearLayoutMA3.setVisibility(View.VISIBLE);
enteredTitle.setText("");
enteredDescription.setText("");
} catch (Exception e) {
}
}
@Override
public void onDeleteClick(int position, int noteId, timeNameViewHolder holder) {
DataHolder.creatingNote = false;
//CANCEL NOTIFICATION DISPLAYED IN NOTIFICATION BAR IF CANCELLED HERE
if (isDeleting) {
return;
}
isDeleting = true;
//System.out.println("isDeleting: " + isDeleting);
//System.out.println("selectedNoteId: " + selectedNoteId);
if (selectedNoteId == -1) {
//isDeleting = false;
//return;
}
//System.out.println("selectedNoteId: " + selectedNoteId);
//System.out.println("selectedPosition: " + selectedPosition);
//System.out.println("position: " + position);
final int deletedPosition = selectedPosition;
//System.out.println("deletedPosition: " + deletedPosition + " noteAdapter.getItemCount(): " + noteAdapter.getItemCount());
if (deletedPosition < 0 || deletedPosition >= noteAdapter.getItemCount()) {
//isDeleting = false;
//return;
}
//System.out.println("CHECK CHECK CHECK CHECK");
final Note noteToDelete = noteAdapter.getNoteAt(deletedPosition);
if (currentSnackbar != null && currentSnackbar.isShown()) {
currentSnackbar.dismiss();
}
noteAdapter.getCurrentNotes().remove(deletedPosition);
noteAdapter.notifyItemRemoved(deletedPosition);
deleteQueue.offer(new PendingDelete(noteToDelete, deletedPosition));
clearNoteUI();
new Handler(Looper.getMainLooper()).postDelayed(new Runnable() {
@Override
public void run() {
if (noteAdapter.getItemCount() > 0) {
int newPosition;
if (deletedPosition == 0) {
newPosition = 0;
} else {
newPosition = deletedPosition - 1;
}
noteAdapter.setSelectedPosition(newPosition);
updateUIWithNote(noteAdapter.getNoteAt(newPosition));
} else {
noteAdapter.resetSelection();
}
}
}, 200);
// Create new Snackbar
currentSnackbar = Snackbar.make(recyclerView, "Note deleted", Snackbar.LENGTH_LONG);
currentSnackbar.setAction("UNDO", new View.OnClickListener() {
@Override
public void onClick(View v) {
PendingDelete pendingDelete = deleteQueue.poll();
if (pendingDelete != null) {
Note restoredNote = pendingDelete.getNote();
int position = pendingDelete.getPosition();
noteAdapter.restoreDeletedNote(position, restoredNote);
noteAdapter.setSelectedPosition(position);
recyclerView.scrollToPosition(position);
updateUIWithNote(restoredNote);
isDeleting = false;
}
}
});
currentSnackbar.addCallback(new Snackbar.Callback() {
@Override
public void onDismissed(Snackbar snackbar, int event) {
if (event == Snackbar.Callback.DISMISS_EVENT_TIMEOUT) {
PendingDelete pendingDelete = deleteQueue.poll();
if (pendingDelete != null) {
cancelNotification();
noteViewModel.delete(pendingDelete.getNote());
if (noteAdapter.getItemCount() != 0) {
int newPosition = Math.max(0, Math.min(deletedPosition - 1, noteAdapter.getItemCount() - 1));
Note newNote = noteAdapter.getNoteAt(newPosition);
if (newNote != null) {
selectedNoteId = selectedNote.getNoteId();
selectedPosition = newPosition;
updateUIWithNote(newNote);
recyclerView.scrollToPosition(newPosition);
}
}
else {
if (DataHolder.hideEditButton == true && noteAdapter.getItemCount() == 0) {
finish();
}
else {
savedDayMonthYear1.setText("Date: " + todatDate);
editedDayMonthYear1.setText("Edited: No Edits");
savedDayMonthYear2.setText("Date: " + todatDate);
editedDayMonthYear2.setText("Edited: No Edits");
showEditTextMode();
}
}
DataHolder.creatingNote = true;
isDeleting = false;
}
}
}
});
currentSnackbar.show();
}
});
}
@NonNull
@Override
public timeNameViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
LayoutInflater inflater = LayoutInflater.from(parent.getContext());
View view = inflater.inflate(R.layout.list_item, parent, false);
ViewGroup.LayoutParams layoutParams = view.getLayoutParams();
return new timeNameViewHolder(view, onItemListener);
}
public interface OnItemClickListener {
void onEditClick(int noteId, String title, String description);
void onDeleteClick(int position, int noteId, timeNameViewHolder holder);
void onItemSelect(int position, timeNameViewHolder holder);
}
public void setOnItemClickListener(OnItemClickListener listener) {
this.listener = listener;
}
public void setNotes(List notes) {
this.notes = notes;
notifyDataSetChanged();
}
public List getCurrentNotes() {
return notes;
}
/*
public void setSelectedPosition(int position) {
//if (position >= 0 && position < getItemCount()) {
int oldPosition = selectedPosition;
selectedPosition = position;
notifyItemChanged(oldPosition);
notifyItemChanged(selectedPosition);
//}
//else {
//int oldPosition = selectedPosition;
//selectedPosition = -1;
//if (oldPosition != -1) {
//notifyItemChanged(oldPosition);
//}
}
*/
public int getSelectedPosition() {
return selectedPosition;
}
public void setSelectedPosition(int position) {
int oldSelectedPosition = selectedPosition;
this.selectedPosition = position;
notifyItemChanged(oldSelectedPosition);
notifyItemChanged(selectedPosition);
}
public Note getNoteAt(int position) {
return notes.get(position);
}
public void resetSelection() {
this.selectedPosition = RecyclerView.NO_POSITION;
notifyDataSetChanged();
}
public void restoreDeletedNote(int position, Note note) {
notes.add(position, note);
notifyItemInserted(position);
setSelectedPosition(position);
}
public int getNotePositionById(int noteId) {
for (int i = 0; i < notes.size(); i++) {
if (notes.get(i).getNoteId() == noteId) {
return i;
}
}
return -1;
}
public void setVisibility(timeNameViewHolder holder) {
if (DataHolder.hideEditButton == true) {
holder.imageEdit.setVisibility(View.GONE);
}
else {
holder.imageEdit.setVisibility(View.VISIBLE);
}
}
@Override
public void onBindViewHolder(@NonNull timeNameViewHolder holder, int position) {
Note currentNote = notes.get(position);
holder.timeNameCell.setText(currentNote.getTitle());
if (position == selectedPosition) {
holder.timeNameCell.setBackgroundColor(Color.parseColor("#5D81FF"));
holder.imageDelete.setVisibility(View.VISIBLE);
setVisibility(holder);
} else {
//holder.timeNameCell.setBackgroundColor(Color.LTGRAY);
holder.timeNameCell.setBackgroundColor(Color.GREEN);
holder.imageDelete.setVisibility(View.GONE);
holder.imageEdit.setVisibility(View.GONE);
}
holder.timeNameCell.setOnClickListener(v -> {
selectedPosition = holder.getAdapterPosition();
if (listener != null) {
listener.onItemSelect(position, holder);
}
notifyDataSetChanged();
});
holder.imageEdit.setOnClickListener(v -> {
if (listener != null) {
listener.onEditClick(currentNote.getNoteId(), currentNote.getTitle(), currentNote.getDescription());
}
});
holder.imageDelete.setOnClickListener(v -> {
if (listener != null) {
listener.onDeleteClick(position, currentNote.getNoteId(), holder);
}
});
}
private void restoreItem() {
DataHolder.deleted = false;
isRestored = true;
DataHolder.isRestored2 = true;
itemViewActive = false;
//enteredTitle.setText(deletedTimeName);
//enteredDescription.setText(deletedDescrList);
timeName.add(recentlyDeletedItemPosition, deletedTimeName);
descrList.add(recentlyDeletedItemPosition, deletedDescrList);
savingEdit.add(recentlyDeletedItemPosition, deletedSavingEdit);
notifyItemInserted(recentlyDeletedItemPosition);
}
@Override
public int getItemCount() {
return notes.size();
}
public interface OnItemListener {
void onItemClick(int position, String timeText);
}
Подробнее здесь: https://stackoverflow.com/questions/796 ... lete-items
Как обрабатывать recyclerview Удалить, отменить и навсегда удалить элементы ⇐ Android
Форум для тех, кто программирует под Android
1746568015
Anonymous
У меня есть метод в моем классе NateActivity и в классе ноты. Я сталкиваюсь с некоторыми проблемами. Удалить и отменить удаление, удаленный элемент, когда он восстанавливается, изменение цвета, как это предполагалось, но элемент, который заменил удаленный элемент, теперь в его исходной позиции также подчеркнут, что он должен изменить на дефолт. Знаешь, что происходит, может кто-нибудь помочь? noteAdapter.setOnItemClickListener(new NoteAdapter.OnItemClickListener() {
@Override
public void onItemSelect(int position, timeNameViewHolder holder) {
try {
isNotifEnabled = false;
DataHolder.creatingNote = false;
current = java.util.Calendar.getInstance();
selectedPosition = position;
System.out.println("onItemSelect position: " + position);
selectedNote = noteAdapter.getCurrentNotes().get(position);
selectedNoteId = selectedNote.getNoteId();
if (DataHolder.hideEditButton != true) {
Save.setVisibility(View.VISIBLE);
Save.setText("Create");
}
noteAdapter.setSelectedPosition(position);
linearLayoutMA4.setVisibility(View.VISIBLE);
linearLayoutMA3.setVisibility(View.GONE);
toolbar.setTitle("Your Notes");
String titleEntered = selectedNote.getTitle();
String descriptionEntered = selectedNote.getDescription();
created = selectedNote.getCreatedAt();
long updated = selectedNote.getUpdatedAt();
enteredTitle.setText(titleEntered);
enteredDescription.setText(descriptionEntered);
getSetUpdated(created, updated, selectedNote);
long currenMilliTime = current.getTimeInMillis();
if (DataHolder.notificationTime(selectedNote) > currenMilliTime) {
notifiActiveOff1.setImageResource(R.drawable.notifications_active);
notificationText1.setText("Notification On");
notifiActiveOff2.setImageResource(R.drawable.notifications_active);
notificationText2.setText("Notification On");
isNotificationOn = true;
} else {
notifiActiveOff1.setImageResource(R.drawable.notifications_off);
notificationText1.setText("Notification Off");
notifiActiveOff2.setImageResource(R.drawable.notifications_off);
notificationText2.setText("Notification Off");
}
}
catch (Exception e) {
}
}
@Override
public void onEditClick(int noteId, String title, String description){
try {
isNotifEnabled = true;
DataHolder.creatingNote = false;
enterTittle.setText(title);
enterDescription.setText(description);
selectedNoteId = noteId;
Save.setText("Save");
toolbar.setTitle("Editing Notes");
isEditing = true;
linearLayoutMA4.setVisibility(View.GONE);
linearLayoutMA3.setVisibility(View.VISIBLE);
enteredTitle.setText("");
enteredDescription.setText("");
} catch (Exception e) {
}
}
@Override
public void onDeleteClick(int position, int noteId, timeNameViewHolder holder) {
DataHolder.creatingNote = false;
//CANCEL NOTIFICATION DISPLAYED IN NOTIFICATION BAR IF CANCELLED HERE
if (isDeleting) {
return;
}
isDeleting = true;
//System.out.println("isDeleting: " + isDeleting);
//System.out.println("selectedNoteId: " + selectedNoteId);
if (selectedNoteId == -1) {
//isDeleting = false;
//return;
}
//System.out.println("selectedNoteId: " + selectedNoteId);
//System.out.println("selectedPosition: " + selectedPosition);
//System.out.println("position: " + position);
final int deletedPosition = selectedPosition;
//System.out.println("deletedPosition: " + deletedPosition + " noteAdapter.getItemCount(): " + noteAdapter.getItemCount());
if (deletedPosition < 0 || deletedPosition >= noteAdapter.getItemCount()) {
//isDeleting = false;
//return;
}
//System.out.println("CHECK CHECK CHECK CHECK");
final Note noteToDelete = noteAdapter.getNoteAt(deletedPosition);
if (currentSnackbar != null && currentSnackbar.isShown()) {
currentSnackbar.dismiss();
}
noteAdapter.getCurrentNotes().remove(deletedPosition);
noteAdapter.notifyItemRemoved(deletedPosition);
deleteQueue.offer(new PendingDelete(noteToDelete, deletedPosition));
clearNoteUI();
new Handler(Looper.getMainLooper()).postDelayed(new Runnable() {
@Override
public void run() {
if (noteAdapter.getItemCount() > 0) {
int newPosition;
if (deletedPosition == 0) {
newPosition = 0;
} else {
newPosition = deletedPosition - 1;
}
noteAdapter.setSelectedPosition(newPosition);
updateUIWithNote(noteAdapter.getNoteAt(newPosition));
} else {
noteAdapter.resetSelection();
}
}
}, 200);
// Create new Snackbar
currentSnackbar = Snackbar.make(recyclerView, "Note deleted", Snackbar.LENGTH_LONG);
currentSnackbar.setAction("UNDO", new View.OnClickListener() {
@Override
public void onClick(View v) {
PendingDelete pendingDelete = deleteQueue.poll();
if (pendingDelete != null) {
Note restoredNote = pendingDelete.getNote();
int position = pendingDelete.getPosition();
noteAdapter.restoreDeletedNote(position, restoredNote);
noteAdapter.setSelectedPosition(position);
recyclerView.scrollToPosition(position);
updateUIWithNote(restoredNote);
isDeleting = false;
}
}
});
currentSnackbar.addCallback(new Snackbar.Callback() {
@Override
public void onDismissed(Snackbar snackbar, int event) {
if (event == Snackbar.Callback.DISMISS_EVENT_TIMEOUT) {
PendingDelete pendingDelete = deleteQueue.poll();
if (pendingDelete != null) {
cancelNotification();
noteViewModel.delete(pendingDelete.getNote());
if (noteAdapter.getItemCount() != 0) {
int newPosition = Math.max(0, Math.min(deletedPosition - 1, noteAdapter.getItemCount() - 1));
Note newNote = noteAdapter.getNoteAt(newPosition);
if (newNote != null) {
selectedNoteId = selectedNote.getNoteId();
selectedPosition = newPosition;
updateUIWithNote(newNote);
recyclerView.scrollToPosition(newPosition);
}
}
else {
if (DataHolder.hideEditButton == true && noteAdapter.getItemCount() == 0) {
finish();
}
else {
savedDayMonthYear1.setText("Date: " + todatDate);
editedDayMonthYear1.setText("Edited: No Edits");
savedDayMonthYear2.setText("Date: " + todatDate);
editedDayMonthYear2.setText("Edited: No Edits");
showEditTextMode();
}
}
DataHolder.creatingNote = true;
isDeleting = false;
}
}
}
});
currentSnackbar.show();
}
});
}
@NonNull
@Override
public timeNameViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
LayoutInflater inflater = LayoutInflater.from(parent.getContext());
View view = inflater.inflate(R.layout.list_item, parent, false);
ViewGroup.LayoutParams layoutParams = view.getLayoutParams();
return new timeNameViewHolder(view, onItemListener);
}
public interface OnItemClickListener {
void onEditClick(int noteId, String title, String description);
void onDeleteClick(int position, int noteId, timeNameViewHolder holder);
void onItemSelect(int position, timeNameViewHolder holder);
}
public void setOnItemClickListener(OnItemClickListener listener) {
this.listener = listener;
}
public void setNotes(List notes) {
this.notes = notes;
notifyDataSetChanged();
}
public List getCurrentNotes() {
return notes;
}
/*
public void setSelectedPosition(int position) {
//if (position >= 0 && position < getItemCount()) {
int oldPosition = selectedPosition;
selectedPosition = position;
notifyItemChanged(oldPosition);
notifyItemChanged(selectedPosition);
//}
//else {
//int oldPosition = selectedPosition;
//selectedPosition = -1;
//if (oldPosition != -1) {
//notifyItemChanged(oldPosition);
//}
}
*/
public int getSelectedPosition() {
return selectedPosition;
}
public void setSelectedPosition(int position) {
int oldSelectedPosition = selectedPosition;
this.selectedPosition = position;
notifyItemChanged(oldSelectedPosition);
notifyItemChanged(selectedPosition);
}
public Note getNoteAt(int position) {
return notes.get(position);
}
public void resetSelection() {
this.selectedPosition = RecyclerView.NO_POSITION;
notifyDataSetChanged();
}
public void restoreDeletedNote(int position, Note note) {
notes.add(position, note);
notifyItemInserted(position);
setSelectedPosition(position);
}
public int getNotePositionById(int noteId) {
for (int i = 0; i < notes.size(); i++) {
if (notes.get(i).getNoteId() == noteId) {
return i;
}
}
return -1;
}
public void setVisibility(timeNameViewHolder holder) {
if (DataHolder.hideEditButton == true) {
holder.imageEdit.setVisibility(View.GONE);
}
else {
holder.imageEdit.setVisibility(View.VISIBLE);
}
}
@Override
public void onBindViewHolder(@NonNull timeNameViewHolder holder, int position) {
Note currentNote = notes.get(position);
holder.timeNameCell.setText(currentNote.getTitle());
if (position == selectedPosition) {
holder.timeNameCell.setBackgroundColor(Color.parseColor("#5D81FF"));
holder.imageDelete.setVisibility(View.VISIBLE);
setVisibility(holder);
} else {
//holder.timeNameCell.setBackgroundColor(Color.LTGRAY);
holder.timeNameCell.setBackgroundColor(Color.GREEN);
holder.imageDelete.setVisibility(View.GONE);
holder.imageEdit.setVisibility(View.GONE);
}
holder.timeNameCell.setOnClickListener(v -> {
selectedPosition = holder.getAdapterPosition();
if (listener != null) {
listener.onItemSelect(position, holder);
}
notifyDataSetChanged();
});
holder.imageEdit.setOnClickListener(v -> {
if (listener != null) {
listener.onEditClick(currentNote.getNoteId(), currentNote.getTitle(), currentNote.getDescription());
}
});
holder.imageDelete.setOnClickListener(v -> {
if (listener != null) {
listener.onDeleteClick(position, currentNote.getNoteId(), holder);
}
});
}
private void restoreItem() {
DataHolder.deleted = false;
isRestored = true;
DataHolder.isRestored2 = true;
itemViewActive = false;
//enteredTitle.setText(deletedTimeName);
//enteredDescription.setText(deletedDescrList);
timeName.add(recentlyDeletedItemPosition, deletedTimeName);
descrList.add(recentlyDeletedItemPosition, deletedDescrList);
savingEdit.add(recentlyDeletedItemPosition, deletedSavingEdit);
notifyItemInserted(recentlyDeletedItemPosition);
}
@Override
public int getItemCount() {
return notes.size();
}
public interface OnItemListener {
void onItemClick(int position, String timeText);
}
Подробнее здесь: [url]https://stackoverflow.com/questions/79609529/how-to-handle-recyclerview-delete-undo-and-permanently-delete-items[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия