Я учусь создавать список для чтения из базы данных Firebase
, используя CheckedTextView
.Я использовал следующий учебник:
https://android.jlelse.eu/android-handling-checkbox-state-in-recycler-views-71b03f237022?fbclid=IwAR0aMMx_2RQmedMfy8d2RMnjsAruPZTvEg1ioZS05PUHUdz21CM7JGbeA4g
Я уже изменил много данных для моей программы, отредактировал модель, MainActivity
и немного Адаптер.Мне кажется, что я уже близок к решению, но я все еще не могу получить список, заполненный данными.Что я не так?
До сих пор я использовал адаптер, который передавал список в конструкторе.Здесь есть отдельная функция loadItems
.Я не уверен, как правильно его использовать.
Вот код:
ChildRecyclerViewAdapter childAdapter = new ChildRecyclerViewAdapter();
LinearLayoutManager childLayoutManager = new LinearLayoutManager(context, LinearLayoutManager.VERTICAL, false);
childRecyclerView.setLayoutManager(childLayoutManager);
childRecyclerView.setAdapter(childAdapter);
//fillItems();
List<Model> childList = new ArrayList<>();
FirebaseFirestore.getInstance().collection("goalsData").document(userEmail).collection("dailyGoals")
.get()
.addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {
@Override
public void onComplete(@NonNull Task<QuerySnapshot> task) {
if (task.isSuccessful()) {
for (QueryDocumentSnapshot document : Objects.requireNonNull(task.getResult())) {
Log.d(TAG, document.getId() + " => " + document.getData() + document.get("name"));
Model item = document.toObject(Model.class);
childList.add(item);
Log.d("TAG2", String.valueOf(item));
}
} else {
Log.d(TAG, "Error getting documents: ", task.getException());
}
}
});
childAdapter.loadItems(childList);
Адаптер:
public class ChildRecyclerViewAdapter extends RecyclerView.Adapter<ChildRecyclerViewAdapter.ChildViewHolder> {
private List<Model> items = new ArrayList<>();
private SparseBooleanArray itemStateArray = new SparseBooleanArray();
public ChildRecyclerViewAdapter() {
}
@NonNull
@Override
public ChildViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
Context context = parent.getContext();
int layoutForItem = R.layout.child_list_item;
LayoutInflater inflater = LayoutInflater.from(context);
View view = inflater.inflate(layoutForItem, parent, false);
return new ChildViewHolder(view);
}
@Override
public void onBindViewHolder(@NonNull ChildViewHolder holder, int position) {
holder.bind(position);
}
@Override
public int getItemCount() {
if (items == null) {
return 0;
}
return items.size();
}
public void loadItems(List<Model> tournaments) {
this.items = tournaments;
notifyDataSetChanged();
}
class ChildViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
CheckedTextView mCheckedTextView;
ChildViewHolder(View itemView) {
super(itemView);
mCheckedTextView = itemView.findViewById(R.id.goalNameCheckedTextView);
itemView.setOnClickListener(this);
Model model = new Model();
mCheckedTextView.setText(model.getName());
Log.d("name23", model.getName());
}
void bind(int position) {
// use the sparse boolean array to check
if (!itemStateArray.get(position, false)) {
mCheckedTextView.setChecked(false);
} else {
mCheckedTextView.setChecked(true);
}
mCheckedTextView.setText(String.valueOf(items.get(position).getPosition()));
}
@Override
public void onClick(View v) {
int adapterPosition = getAdapterPosition();
if (!itemStateArray.get(adapterPosition, false)) {
mCheckedTextView.setChecked(true);
itemStateArray.put(adapterPosition, true);
} else {
mCheckedTextView.setChecked(false);
itemStateArray.put(adapterPosition, false);
}
}
}
}
Модель:
public class Model {
private String name;
public Model(){}
public Model(String name){
this.name = name;
}
private int position;
public int getPosition() {
return position;
}
public void setPosition(int position) {
this.position = position;
}
private boolean isChecked;
public boolean getChecked() {
return isChecked;
}
public void setChecked(boolean checked) {
isChecked = checked;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}