Как я могу использовать этот метод reload () для метода onLongClick? - PullRequest
0 голосов
/ 21 июня 2020

Я применяю функцию удаления к своему приложению заметок, но когда я что-то удаляю, это не изменяется на экране, пока я не выполню какое-либо действие, которое перезагружает его, например, создание новой заметки или доступ к заметке и выход из нее ( даже тот удалил). Только тогда удаленная заметка исчезнет, ​​хотя я явно использовал функцию перезагрузки. Вот мой адаптер, с которым у меня проблема.

public class NotesAdapter extends RecyclerView.Adapter<NotesAdapter.NoteViewHolder> {
public static class NoteViewHolder extends RecyclerView.ViewHolder {
    public LinearLayout containerView;
    public TextView nameTextView;
    public NotesAdapter adapter = new NotesAdapter();

    public NoteViewHolder(View view) {
        super(view);
        this.containerView = view.findViewById(R.id.note_row);
        this.nameTextView = view.findViewById(R.id.note_row_name);

        this.containerView.setOnLongClickListener(new View.OnLongClickListener() {
            @Override
            public boolean onLongClick(final View view) {
                final Note note = (Note) containerView.getTag();

                PopupMenu popupMenu = new PopupMenu(view.getContext(), view);
                popupMenu.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
                    @Override
                    public boolean onMenuItemClick(MenuItem menuItem) {
                        if (menuItem.getItemId() == R.id.delete) {
                            Toast.makeText(view.getContext(), "Note deleted", Toast.LENGTH_SHORT).show();
                            MainActivity.database.noteDao().delete(note.id);
                            adapter.reload;
                            return true;
                        } else {
                            return false;
                        }
                    }
                });
                popupMenu.inflate(R.menu.delete_menu);
                popupMenu.show();

                return true;
            }
        });

        this.containerView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Context context = v.getContext();
                Note note = (Note) containerView.getTag();
                Intent intent = new Intent(v.getContext(), NoteActivity.class);
                intent.putExtra("id", note.id);
                intent.putExtra("content", note.content);

                context.startActivity(intent);
            }
        });
    }
}

private List<Note> notes = new ArrayList<>();

@Override
public NoteViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    View view = LayoutInflater.from(parent.getContext())
            .inflate(R.layout.note_row, parent, false);

    return new NoteViewHolder(view);
}

@Override
public void onBindViewHolder(NoteViewHolder holder, int position) {
    Note current = notes.get(position);
    holder.containerView.setTag(current);
    holder.nameTextView.setText(current.content);
}

@Override
public int getItemCount() {
    return notes.size();
}

public void reload() {
    notes = MainActivity.database.noteDao().getAll();
    notifyDataSetChanged();
}
}

Пожалуйста, помогите мне, я работаю над этим уже несколько дней, и я застрял над простой проблемой

1 Ответ

0 голосов
/ 21 июня 2020

Обновить данные после обновления базы данных. Вызвать reload() после удаления заметки:

popupMenu.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
    @Override
    public boolean onMenuItemClick(MenuItem menuItem) {
        if (menuItem.getItemId() == R.id.delete) {
            Toast.makeText(view.getContext(), "Note deleted", Toast.LENGTH_SHORT).show();
            MainActivity.database.noteDao().delete(note.id);
            reload(); // reload data
            return true;
        } else {
            return false;
        }
    }
});
...