Получение идентификатора выбранного переработчикаПросмотреть элемент android - PullRequest
0 голосов
/ 04 марта 2020

Я сделал приложение для заметок и все работает нормально. Просто в RecyclerView List, когда я выбираю элемент или элементы и в меню нажимаю кнопку «Удалить», заметка не удаляется. Хотя метод удаления работает в другом месте. Вот метод удаления кнопки в меню:

@Override
public boolean onActionItemClicked(ActionMode mode, MenuItem item) {
    if (item.getItemId() == R.id.delete_selected) {
        for (NotePad notePad : notes) {
            if (selectedIds.contains(notePad.getId())) {
                database = new Database(this);
                database.deleteNote(notePad.getId());
            }
        }
        adapter.notifyDataSetChanged();
        return true;
    }
    return false;
} 

И метод удаления заметки в моем классе базы данных:

   void deleteNote(long id) {
    SQLiteDatabase database = this.getWritableDatabase();
    database.delete(DATABASE_TABLE, ID + "=?", new String[] {String.valueOf(id)});
    database.close();
}

Я не знаю, как связать идентификатор выбранной заметки с Мой метод вызывает метод deletNote получает длинное значение, но мой selectedId - это List. Заранее спасибо.

ОБНОВЛЕНО

Я понял, что мой код работает найти, но он не обновляет sh список, а также возвращается из ActionMode на панель инструментов. Я попытался адаптер.notifyDataSetChanged ();

1 Ответ

1 голос
/ 04 марта 2020

Используйте этот адаптер. Я использовал интерфейс.

public class NotePadAdapter extends RecyclerView.Adapter < NotePadAdapter.ViewHolder > {

    private Context context;
    private LayoutInflater inflater;
    private List < NotePad > notes;
    private List < Long > selectedIds = new ArrayList < > ();
    private NoteClickListener listener;

    NotePadAdapter(Context context, NoteClickListener listener, List < NotePad > notes) {
        this.context = context;
        this.inflater = LayoutInflater.from(context);
        this.notes = notes;
        this.listener = listener;
    }

    public interface NoteClickListener {
        public void onNoteClick(NotePad notePad);
    }

    @NonNull
    @Override
    public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        View view = inflater.inflate(R.layout.notes_list, parent, false);
        return new ViewHolder(view);
    }

    @Override
    public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
        String title = notes.get(position).getTitle();
        String date = notes.get(position).getDate();
        String time = notes.get(position).getTime();

        holder.setOnClickListener() {
            listener.onNoteClick(notes.get(position))
        }

        holder.noteTitle.setText(title);
        holder.noteTitle.setText(title);
        holder.noteDate.setText(date);
        holder.noteTime.setText(time);

        long id = notes.get(position).getId();
        if (selectedIds.contains(id)) {
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
                holder.rooView.setForeground(new ColorDrawable(ContextCompat.getColor(context, R.color.colorControlActivated)));
            }
        } else {

            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
                holder.rooView.setForeground(new ColorDrawable(ContextCompat.getColor(context, android.R.color.transparent)));
            }
        }

    }

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

    public NotePad getItem(int position) {
        return notes.get(position);
    }

    public void setSelectedIds(List < Long > selectedIds) {
        this.selectedIds = selectedIds;
        notifyDataSetChanged();
    }

    class ViewHolder extends RecyclerView.ViewHolder {
        TextView noteTitle, noteDate, noteTime;
        ConstraintLayout rooView;

        ViewHolder(@NonNull View itemView) {
            super(itemView);

            noteTitle = itemView.findViewById(R.id.note_title);
            noteDate = itemView.findViewById(R.id.note_date);
            noteTime = itemView.findViewById(R.id.note_time);
            rooView = itemView.findViewById(R.id.root_view);

            itemView.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    Intent i = new Intent(v.getContext(), ContentActivity.class);
                    i.putExtra("ID", notes.get(getAdapterPosition()).getId());
                    v.getContext().startActivity(i);
                }
            });
        }
    }
}

В вашей деятельности / фрагменте, где вы инициируете этот adapter проход this для слушателя и реализуете интерфейс, и всякий раз, когда вы щелкаете по любому элементу в представлении реселлера, вы будете весь ваш блокнот внутри этой функции.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...