Firestore + CheckedTextView + RecyclerView -> установить данные - PullRequest
0 голосов
/ 05 декабря 2018

Я учусь создавать список для чтения из базы данных 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;
}
}

1 Ответ

0 голосов
/ 05 декабря 2018

Загрузите элементы в адаптер в onComplete

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));
        }
        childAdapter.loadItems(childList);
    } else {
        Log.d(TAG, "Error getting documents: ", task.getException());
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...