Как обрабатывать recyclerview Удалить, отменить и навсегда удалить элементыAndroid

Форум для тех, кто программирует под Android
Ответить
Anonymous
 Как обрабатывать recyclerview Удалить, отменить и навсегда удалить элементы

Сообщение 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);
}


Подробнее здесь: https://stackoverflow.com/questions/796 ... lete-items
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Android»