@bodusiacool

Как использовать данные из базы данных FireBase в RecyclerAdapter?

Я уже посмотрел некоторую информацию о RecyclerAdapter, но т.к к сожалению большинство источников англоязычные и некоторые аспекты я и переводчик не понимаем. Итак, вот моя база данных
kPlyI.png

RecyclerAdapter классы в нем:

public RecyclerAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType){
View view = inflater.inflate(R.layout.coupon,parent,false);
return new ViewHolder(view);

OnBindViewHoder
public void onBindViewHolder(ViewHolder viewHolder, int position) {
    Coupons coupons = coupons2.get(position);
    viewHolder.imageView.setImageResource(coupons.getLogo());
    viewHolder.nameView.setText(coupons.getName());
    viewHolder.sumView.setText(coupons.getSum());
}

getItemCount
public int getItemCount(){
    return coupons2.size();
     }
     static class ViewHolder extends RecyclerView.ViewHolder{
    final ImageView imageView;
    final TextView nameView,sumView;
    ViewHolder(View v){
        super(v);
        imageView = (ImageView) v.findViewById(R.id.logo);
        nameView = (TextView) v.findViewById(R.id.name);
        sumView = (TextView)v.findViewById(R.id.sum);
    }

All RecyclerAdapter.java:
class RecyclerAdapter extends RecyclerView.Adapter<RecyclerAdapter.ViewHolder> {
    private LayoutInflater inflater;
    private List<Coupons> coupons2;
    RecyclerAdapter(Context context, List<Coupons> coupons2){
        this.coupons2 = coupons2;
        this.inflater = LayoutInflater.from(context);
    }
    @Override
    public RecyclerAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType){
        View view = inflater.inflate(R.layout.coupon,parent,false);
        return new ViewHolder(view);
    }

    @Override
    public void onBindViewHolder(ViewHolder viewHolder, int position) {
        Coupons coupons = coupons2.get(position);
        viewHolder.imageView.setImageResource(coupons.getLogo());
        viewHolder.nameView.setText(coupons.getName());
        viewHolder.sumView.setText(coupons.getSum());
    }

    @Override
    public int getItemCount(){
        return coupons2.size();
    }
    static class ViewHolder extends RecyclerView.ViewHolder{
        final ImageView imageView;
        final TextView nameView,sumView;
        ViewHolder(View v){
            super(v);
            imageView = (ImageView) v.findViewById(R.id.logo);
            nameView = (TextView) v.findViewById(R.id.name);
            sumView = (TextView)v.findViewById(R.id.sum);
        }
    }

LibraryActivity classes in it:

onCreate:
super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_library);
        setInitialData();
        RecyclerView recyclerView = (RecyclerView) findViewById(R.id.list);
        RecyclerAdapter adapter = new RecyclerAdapter(this,couponss);
        recyclerView.setAdapter(adapter);
        recyclerView.setLayoutManager(new LinearLayoutManager(this));
        DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
        Query query = rootRef.child("Сoupons");
        FirebaseRecyclerOptions<Coupons> firebaseRecyclerOptions = new FirebaseRecyclerOptions.Builder<Coupons>()
                .setQuery(query, Coupons.class)
                .build();


All LibraryActivity.java:
List<Coupons> couponss = new ArrayList<>();
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_library);
        setInitialData();
        RecyclerView recyclerView = (RecyclerView) findViewById(R.id.list);
        RecyclerAdapter adapter = new RecyclerAdapter(this,couponss);
        recyclerView.setAdapter(adapter);
        recyclerView.setLayoutManager(new LinearLayoutManager(this));
        DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
        Query query = rootRef.child("Сoupons");
        FirebaseRecyclerOptions<Coupons> firebaseRecyclerOptions = new FirebaseRecyclerOptions.Builder<Coupons>()
                .setQuery(query, Coupons.class)
                .build();

    }
    private void setInitialData(){

        couponss.add(new Coupons("Лента","-500",R.drawable.aaaaaaaaaaa));
    }

All Coupons.java:
public class Coupons {
    private String name;
    private int logo;
    private String sum;

    public Coupons(String name, String sum, int logo) {
        this.name = name;
        this.sum = sum;
        this.logo = logo;
    }
    public String getName() {
        return this.name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getSum(){
        return this.sum;

    }
    public void setSum(String sum){
        this.sum = sum;
    }
    public int getLogo(){
        return this.logo;
    }
    public void setLogo(int logo){
        this.logo = logo;
    }
    @Exclude
    public Map<String, Object> toMap() {
        HashMap<String, Object> result = new HashMap<>();
        result.put("name", name);
        result.put("sum", sum);
        result.put("logo", logo);
  return result;
    }

Где я допустил ошибку?
  • Вопрос задан
  • 401 просмотр
Решения вопроса 1
zagayevskiy
@zagayevskiy Куратор тега Java
Android developer at Yandex
Недостаточно просто обновить данные в списке. Нужно ещё оповестить об этом адаптер. В методе setInitialData. Дёрнуть метод notifyDatasetChanged.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы