Как передать данные в recyclerView из активности?

161
30 декабря 2019, 02:00

Только начинаю погружаться в android, в связи с этим возникают некие сложности. У меня в проекте есть recyclerView с обектами Note, при нажатии на которые я открываю активность с информацией об этой "записке", конкретно название и основной текст. У меня реализовано подгрузка названия и текста в активность, при ее открытии, но я не понимаю, как я могу сохранить отредактированную заметку и отобразить обновленные название и текст на "главном" экране.

Код recyclerViewAdapter.java

public class RecyclerViewAdapter extends RecyclerView.Adapter<RecyclerViewAdapter.MyViewHolder> {
Context mContext;
List<Note> mData;
Dialog mDialog;
//NotesFragment notesFragment;
int selected;

public RecyclerViewAdapter(Context mContext, List<Note> mData) {
    this.mContext = mContext;
    this.mData = mData;
    //this.notesFragment = notesFragment;
}
@NonNull
@Override
public MyViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
    View v;
    v = LayoutInflater.from(mContext).inflate(R.layout.notes_list_item,viewGroup,false);
    final MyViewHolder viewHolder = new MyViewHolder(v);

    //---------------------Инициализация диалогового окна и его вызов по кнопке----------------------------------------------------------
    mDialog = new Dialog(mContext);
    mDialog.setContentView(R.layout.dialog_note);
    Button yes_button = mDialog.findViewById(R.id.dialog_yes_btn);
    Button no_button = mDialog.findViewById(R.id.dialog_no_btn);
    viewHolder.item_note.setOnLongClickListener(new View.OnLongClickListener() {
        @Override
        public boolean onLongClick(View v) {
            Toast.makeText(mContext,"Test Click" + String.valueOf(viewHolder.getAdapterPosition()),Toast.LENGTH_SHORT).show();
            mDialog.show();
            selected = viewHolder.getAdapterPosition();
            return false;
        }
    });
    yes_button.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            try {
                deleteItem(selected);
                mDialog.cancel();
                notifyDataSetChanged();
                //   for (int i = 0; i < mData.size(); i++) {
                //      mData[i]
                //  }
            }catch (ArrayIndexOutOfBoundsException e){
                Log.e("Error","\n ArrayIndexOutOfBoundsException length=10 index=-1 \n Опять -1, но как ???");
            }
        }
    });
    no_button.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            mDialog.cancel();
        }
    });
//-------------------------------------------------------------------------------------------------------------------------------------
// Редактор заметки?
viewHolder.item_note.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        Intent intent = new Intent(mContext,NoteActivity.class);
        intent.putExtra("Title",viewHolder.tv_Name.getText().toString());
        intent.putExtra("Text",viewHolder.tv_Text.getText().toString());
        mContext.startActivity(intent);


    }
});



    return viewHolder;
}
@Override
public void onBindViewHolder(@NonNull MyViewHolder holder, int position) {
    holder.tv_Name.setText(mData.get(position).getName());
    holder.tv_Date.setText(mData.get(position).getDate());
    holder.button.setBackgroundResource(mData.get(position).getFavourite());
    holder.tv_Text.setText(mData.get(position).getText());


}
@Override
public int getItemCount() {
    return mData.size();
}
public static class MyViewHolder extends RecyclerView.ViewHolder{
    private LinearLayout item_note;
    private TextView tv_Name;
    private TextView tv_Date;
    private Button button;
    private TextView tv_Text;

    public MyViewHolder(@NonNull View itemView) {
        super(itemView);
        item_note = itemView.findViewById(R.id.note_item);
        tv_Name = itemView.findViewById(R.id.name_note);
        tv_Date = itemView.findViewById(R.id.date_note);
        button = itemView.findViewById(R.id.favorite_btn_note);
        tv_Text = itemView.findViewById(R.id.text_note);
    }
}
//Добавление данных
public void addItem(int position, Note note){
    mData.add(position, note);
    //Мы можем вызвать
    super.notifyItemInserted(position);
}
//Удаление данных
public void deleteItem(int position){
    mData.remove(position);
    //То же самое с методом
    super.notifyItemRemoved(position);
    notifyItemRemoved(position);
    notifyItemRangeChanged(position, mData.size());
  //  notesFragment.decreasePosition();
    NotesFragment.decreasePosition();

}

}

Код NoteActivity.java

public class NoteActivity extends AppCompatActivity {

private String NoteTitle;
private String NoteText;
EditText textNote;
EditText titleNote;
Button saveBtn;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_note);
    saveBtn = findViewById(R.id.save_btn);
   // saveBtn.setCompoundDrawablesWithIntrinsicBounds(
    //        AppCompatResources.getDrawable(this, R.drawable.save), null, null, null); --иконочка
    titleNote = findViewById(R.id.title_note);
    textNote = findViewById(R.id.main_text_note);

    Intent intent = getIntent();
    NoteTitle = intent.getStringExtra("Title");
    NoteText = intent.getStringExtra("Text");
    titleNote.setText(NoteTitle);
    textNote.setText(NoteText);


    saveBtn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
          //  Intent intent = new Intent(getApplicationContext(),MainActivity.class);
          //  startActivity(intent);  -- создание новой мейн активности

            Intent intent = new Intent(getApplicationContext(),MainActivity.class);
            intent.putExtra("TitleGet",titleNote.getText().toString());
            finish();
        }
    });


}

}

Повторюсь - нужно как-то получать обновленное название и текст заметки по нажатии на кнопку saveBtn. Заранее извиняюсь, если что-то непонятно. Один из первых разов на сайте. Заранее спасибо за ответ!

READ ALSO
Редактируемые колонки TableView (JavaFX)

Редактируемые колонки TableView (JavaFX)

При динамическом заполнении таблицы колонками возникла проблема с их редактированиемДанные подгружаются с базы данных, поэтому был вынужден...

129
Блокировка потоков Java

Блокировка потоков Java

Задание: Выполнить приложение командной строки с двумя параметрами, один из которых – количество потоков, другой параметр – количество...

164
Поверка метода на исключения(Exceptions)

Поверка метода на исключения(Exceptions)

хотелось проверить получение параметров на их валидность и выбросить исключение с соответствующим описанием ошибки, для этого как я понимаю...

143
Высота дочернего блока

Высота дочернего блока

Как в css сделать так, чтобы высота дочернего блока занимала всю высоту родительского? Высота родительского блока при этом не определена

170