немного сложно, но я постараюсь объяснить. У меня есть 3 фрагмента. Первый фрагмент (NoteFragment) содержит представление всех примечаний в форме переписчика. Второй фрагмент (AddNoteFragment) открывается, когда я нажимаю кнопку «Добавить примечание», которая является кнопкой в первом фрагменте. Третий фрагмент (RemoveNoteFragment) - это фрагмент, который появляется после того, как я нажимаю на одну из заметок. (У меня есть слушатель в NoteAdapter).
Первый фрагмент и второй фрагмент отображаются в одном и том же макете кадра. Во втором фрагменте у меня есть кнопка, которая, как только я нажимаю на нее, я хочу удалить заметку (из представления рециркулятора и из Firebase - посмотрите код, как я это делаю).
Фрагмент заметки
public class NoteFragment extends Fragment implements View.OnClickListener {
private RecyclerView RVNotesList;
private ArrayList<Note> notes = new ArrayList<>();
private NotesAdapter adapter;
private ImageView mAddNoteBTN;
private Note note;
private ArrayList<String> keys = new ArrayList<>();
private FirebaseAuth mAuth;
private FirebaseDatabase db;
private DatabaseReference users;
private RecyclerView.LayoutManager layoutManager;
private Fragment removeFragment;
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_main_notes, container, false);
getActivity().getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_VISIBLE | WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE);
removeFragment = new RemoveNoteFragment();
mAuth = FirebaseAuth.getInstance();
db = FirebaseDatabase.getInstance();
users = db.getReference("Users").child(mAuth.getCurrentUser().getUid()).child("Notes");
mAddNoteBTN = view.findViewById(R.id.addNoteBTN);
mAddNoteBTN.setOnClickListener(this);
RVNotesList = view.findViewById(R.id.RVNotesList);
users.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull final DataSnapshot dataSnapshot) {
notes.clear();
for (DataSnapshot dataSnapshot1 : dataSnapshot.getChildren()) {
note = dataSnapshot1.getValue(Note.class);
notes.add(note);
keys.add(dataSnapshot1.getKey());
}
adapter = new NotesAdapter(notes, getActivity(), keys);
if (adapter.getItemCount() <= 3) {
layoutManager = new GridLayoutManager(getActivity(), 1);
} else {
layoutManager = new GridLayoutManager(getActivity(), 3);
}
RVNotesList.setLayoutManager(layoutManager);
RVNotesList.setAdapter(adapter);
adapter.setOnNoteClickListener(new NotesAdapter.OnNoteClickListener() {
@Override
public void onNoteClick(final int position) {
getFragmentManager().beginTransaction().replace(R.id.bottom_container, removeFragment)
.commit();
String key = keys.get(position);
users.child(key).removeValue();
}
});
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
return view;
}
@Override
public void onClick(View view) {
switch (view.getId()) {
case R.id.addNoteBTN:
getFragmentManager().beginTransaction().setCustomAnimations(R.anim.enter_left_to_right, R.anim.exit_left_to_right).replace(R.id.bottom_container, new AddNoteFragment())
.commit();
break;
}
}
}
Добавить фрагмент заметки
public class AddNoteFragment extends Fragment implements View.OnClickListener, AddNotePresenter {
private EditText ETnoteTitle, ETnoteDesc;
private TextView TVnoteLastDate;
private Button saveNoteBTN, deleteNoteBTN, BTNtaskDatePicker;
private Note note;
private int day;
private int month;
private int year;
private Calendar c;
private DatePickerDialog dpd;
private AddNoteView addNoteView;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_add_note, container, false);
addNoteView = new AddNoteView(this);
ETnoteTitle = view.findViewById(R.id.noteTitle);
ETnoteDesc = view.findViewById(R.id.noteDesc);
TVnoteLastDate = view.findViewById(R.id.TVnoteLastDate);
BTNtaskDatePicker = view.findViewById(R.id.taskDatePicker);
BTNtaskDatePicker.setOnClickListener(this);
saveNoteBTN = view.findViewById(R.id.saveNoteBTN);
saveNoteBTN.setOnClickListener(this);
deleteNoteBTN = view.findViewById(R.id.deleteNoteBTN);
deleteNoteBTN.setOnClickListener(this);
return view;
}
@Override
public void onClick(View view) {
switch (view.getId()) {
case R.id.saveNoteBTN:
saveNote();
hideKeyboard(getActivity());
break;
case R.id.deleteNoteBTN:
removeAddNoteFragment();
hideKeyboard(getActivity());
break;
case R.id.taskDatePicker:
showDatePicker();
break;
}
}
@Override
public void removeAddNoteFragment() {
getFragmentManager().beginTransaction().
remove(getFragmentManager().findFragmentById(R.id.bottom_container)).commit();
}
public void showDatePicker() {
c = Calendar.getInstance();
day = c.get(Calendar.DAY_OF_MONTH);
month = c.get(Calendar.MONTH);
year = c.get(Calendar.YEAR);
dpd = new DatePickerDialog(getActivity(), R.style.DialogTheme, new DatePickerDialog.OnDateSetListener() {
@Override
public void onDateSet(DatePicker datePicker, int mYear, int mMonth, int mDay) {
day = mDay;
month = mMonth + 1;
year = mYear;
TVnoteLastDate.setText(mDay + "/" + (mMonth + 1) + "/" + mYear);
}
}, day, month, year);
dpd.getDatePicker().setMinDate(System.currentTimeMillis() - 1000);
dpd.show();
}
public void saveNote() {
String title = ETnoteTitle.getText().toString().trim();
String desc = ETnoteDesc.getText().toString().trim();
String date = TVnoteLastDate.getText().toString().trim();
if (title.isEmpty() || desc.isEmpty() || date.isEmpty()) {
return;
}
note = new Note(title, desc, day, month, year);
addNoteView.pushNote(note);
}
public static void hideKeyboard(Activity activity) {
InputMethodManager imm = (InputMethodManager) activity.getSystemService(Activity.INPUT_METHOD_SERVICE);
View view = activity.getCurrentFocus();
if (view == null) {
view = new View(activity);
}
imm.hideSoftInputFromWindow(view.getWindowToken(), 0);
}
}
Удалить фрагмент заметки
public class RemoveNoteFragment extends Fragment{
private ImageView IVremoveNote;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_remove_note, container, false);
IVremoveNote = view.findViewById(R.id.IVremoveNote);
return view;
}
}
Адаптер заметки
public class NotesAdapter extends RecyclerView.Adapter<NotesAdapter.NotesViewHolder> {
private ArrayList<Note> notes;
private Context context;
private ArrayList<String> keys;
private OnNoteClickListener onNoteClickListener;
public NotesAdapter(ArrayList<Note> notes, Context context, ArrayList<String> k) {
this.notes = notes;
this.context = context;
this.keys = k;
}
public interface OnNoteClickListener {
void onNoteClick(int position);
}
public void setOnNoteClickListener(OnNoteClickListener onNoteClickListener) {
this.onNoteClickListener = onNoteClickListener;
}
@NonNull
@Override
public NotesViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.note_list_item, parent, false);
return new NotesAdapter.NotesViewHolder(view);
}
@Override
public void onBindViewHolder(@NonNull final NotesViewHolder holder, final int position) {
final Note note = notes.get(position);
holder.TVnoteCardTitle.setText(notes.get(position).getmNoteTitle());
holder.TVnoteCardDesc.setText(notes.get(position).getmNoteDescription());
String lastDayToConfirmNote = (notes.get(position).getmDay() + "/"
+ notes.get(position).getmMonth() + "/" + notes.get(position).getmYear());
holder.TVnoteCardLastDate.setText(lastDayToConfirmNote);
}
@Override
public int getItemCount() {
return notes.size();
}
public class NotesViewHolder extends RecyclerView.ViewHolder {
private TextView TVnoteCardTitle;
private TextView TVnoteCardDesc;
private TextView TVnoteCardLastDate;
public NotesViewHolder(@NonNull View itemView) {
super(itemView);
TVnoteCardTitle = itemView.findViewById(R.id.TVnoteCardTitle);
TVnoteCardDesc = itemView.findViewById(R.id.TVnoteCardDesc);
TVnoteCardLastDate = itemView.findViewById(R.id.TVnoteCardLastDate);
itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if (onNoteClickListener != null) {
onNoteClickListener.onNoteClick(getAdapterPosition());
}
}
});
}
}
}
Что я хочу? Я хочу, чтобы после того, как я щелкну на IVremoveNote, который находится внутри RemoveNoteFragment, мой NoteFragment знает об этом, и я могу выполнять действия внутри него (в NoteFragment).
Или, если у вас есть другое решение для удаления заметки,Я хотел бы услышать.
Обратите внимание, что для удаления заметки я использую прослушиватель внутри адаптера заметки, который принимает позицию списка массивов ключей.