Как загрузить в firebase имя пользователя, отметившегося в checkbox
Суть в том, что у меня есть фрагмент, на котором выводятся в RecyclerView так называемые мероприятия с полем CheckBox. Мне нужно, чтобы имя пользователя, поставившего галочку сохранялось в firebase в отдельный child этого мероприятия для того, чтобы потом, при нажатии на каждое мероприятие, можно было увидеть список отметившихся пользователей
Код самого фрагмента HomeFragment.java
package com.example.bottom_project.ui.home;
import android.content.DialogInterface;
import android.os.Bundle;
import android.text.TextUtils;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.RelativeLayout;
import androidx.annotation.NonNull;
import androidx.appcompat.app.AlertDialog;
import androidx.fragment.app.Fragment;
import androidx.lifecycle.ViewModelProvider;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import com.example.bottom_project.Models.MyEvent;
import com.example.bottom_project.R;
import com.firebase.ui.database.FirebaseRecyclerAdapter;
import com.firebase.ui.database.FirebaseRecyclerOptions;
import com.google.android.material.floatingactionbutton.FloatingActionButton;
import com.google.android.material.snackbar.Snackbar;
import com.google.firebase.database.FirebaseDatabase;
import com.google.firebase.database.Query;
import com.rengwuxian.materialedittext.MaterialEditText;
import java.util.ArrayList;
import static android.content.ContentValues.TAG;
public class HomeFragment extends Fragment implements EventsAdapter.OnEventlistener {
FloatingActionButton btnNewEvent;
private RelativeLayout relativeLayout;
private FirebaseRecyclerAdapter adapter;
private ArrayList<MyEvent> mEvents = new ArrayList<>();
public View onCreateView(@NonNull LayoutInflater inflater,
ViewGroup container, Bundle savedInstanceState) {
View root = inflater.inflate(R.layout.fragment_home, container, false);
btnNewEvent = root.findViewById(R.id.btnNewEvent);
btnNewEvent.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
setNewEvent();
}
});
RecyclerView listOfEvents = root.findViewById(R.id.list_of_events);
listOfEvents.setLayoutManager(new LinearLayoutManager(requireContext()));
Query query = FirebaseDatabase.getInstance().getReference().child("Events");
FirebaseRecyclerOptions<MyEvent> options =
new FirebaseRecyclerOptions.Builder<MyEvent>()
.setQuery(query, MyEvent.class)
.build();
adapter = new EventsAdapter(options, this);
listOfEvents.setAdapter(adapter);
return root;
}
@Override
public void onStart() {
super.onStart();
adapter.startListening();
}
@Override
public void onStop() {
super.onStop();
adapter.stopListening();
}
private void setNewEvent() {
AlertDialog.Builder dialog = new AlertDialog.Builder(requireContext());
dialog.setTitle("Новое мероприятие");
dialog.setMessage("Введите данные нового мероприятия");
LayoutInflater inflater = LayoutInflater.from(requireContext());
View add_new_event = inflater.inflate(R.layout.add_event_window, null);
dialog.setView(add_new_event);
final MaterialEditText place = add_new_event.findViewById(R.id.placeField);
final MaterialEditText name = add_new_event.findViewById(R.id.nameField);
final MaterialEditText date = add_new_event.findViewById(R.id.dateField);
final MaterialEditText time = add_new_event.findViewById(R.id.timeField);
dialog.setNegativeButton("Отмена", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int which) {
dialogInterface.dismiss();
}
});
dialog.setPositiveButton("Добавить", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
if (TextUtils.isEmpty(name.getText().toString())){
Snackbar.make(relativeLayout, "Введите название", Snackbar.LENGTH_SHORT).show();
return;
}
if (TextUtils.isEmpty(place.getText().toString())){
Snackbar.make(relativeLayout, "Введите место", Snackbar.LENGTH_SHORT).show();
return;
}
if (TextUtils.isEmpty(date.getText().toString())){
Snackbar.make(relativeLayout, "Введите дату проведения", Snackbar.LENGTH_SHORT).show();
return;
}
if (TextUtils.isEmpty(time.getText().toString())){
Snackbar.make(relativeLayout, "Введите время", Snackbar.LENGTH_SHORT).show();
return;
}
FirebaseDatabase.getInstance().getReference().child("Events").push().setValue(
new MyEvent(name.getText().toString(),
place.getText().toString(),
date.getText().toString(),
time.getText().toString()));
}
});
dialog.show();
}
@Override
public void onEventClick(int position) {
//mEvents.get(position);
Log.d(TAG, "onNoteClick: clicked." + position);
}
}
Код адаптера EventsAdapter.java
package com.example.bottom_project.ui.home;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.CheckBox;
import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.appcompat.app.AlertDialog;
import androidx.cardview.widget.CardView;
import androidx.recyclerview.widget.RecyclerView;
import com.example.bottom_project.Models.MyEvent;
import com.example.bottom_project.R;
import com.firebase.ui.database.FirebaseRecyclerAdapter;
import com.firebase.ui.database.FirebaseRecyclerOptions;
import com.google.firebase.database.DatabaseReference;
import com.google.firebase.database.FirebaseDatabase;
import java.util.ArrayList;
public class EventsAdapter extends FirebaseRecyclerAdapter<MyEvent, EventsAdapter.ViewHolder> {
private DatabaseReference databaseRef;
private Context context;
private ArrayList<MyEvent> mEvents = new ArrayList<>();
private final OnEventlistener mOnEventListener;
public EventsAdapter(@NonNull FirebaseRecyclerOptions<MyEvent> options, OnEventlistener onEventlistener ) {
super(options);
databaseRef = FirebaseDatabase.getInstance().getReference("yourReference");
this.mOnEventListener = onEventlistener;
}
@Override
protected void onBindViewHolder(@NonNull ViewHolder holder, int i, @NonNull MyEvent model) {
holder.name.setText(model.getName());
holder.time.setText(model.getTime());
holder.place.setText(model.getPlace());
holder.date.setText(model.getDate());
//===========click listner of check box===============//
holder.checkBox.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View arg0) {
final boolean isChecked = holder.checkBox.isChecked();
if (isChecked) {
} else {
}
}
});
}
@NonNull
@Override
public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.list_events, parent, false);
context = parent.getContext();
return new ViewHolder(view, mOnEventListener);
}
private void itemClick(int position) {
}
static class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener{
TextView place, name, date, time;
OnEventlistener onEventlistener;
CheckBox checkBox;
CardView mCard;
public ViewHolder(@NonNull View v, OnEventlistener onEventlistener){
super(v);
mCard = v.findViewById(R.id.card_view);
name = v.findViewById(R.id.name);
place = v.findViewById(R.id.place);
date = v.findViewById(R.id.date);
time = v.findViewById(R.id.time);
checkBox = v.findViewById(R.id.checkBox);
this.onEventlistener = onEventlistener;
itemView.setOnClickListener(this);
//mCard.setOnClickListener(this);
}
@Override
public void onClick(View v) {
onEventlistener.onEventClick(getAdapterPosition());
}
}
public interface OnEventlistener{
void onEventClick(int position);
}
}
Код модели MyEvent
package com.example.bottom_project.Models;
import java.util.Calendar;
public class MyEvent {
public String name, place;
private String date, time;
public boolean check = false;
MyEvent(){}
public MyEvent(String name, String place, String date, String time) {
this.name = name;
this.place = place;
this.date = date;
this.time = time;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPlace() {
return place;
}
public void setPlace(String place) {
this.place = place;
}
public String getDate() {
return date;
}
public void setDate(String date) {
this.date = date;
}
public String getTime() {
return time;
}
public void setTime(String time) {
this.time = time;
}
public boolean isPossible() {
return check;
}
public void setPossible(boolean possible) {
this.check = possible;
}
}