• Как в database.getReference().child() фрагмента передать значение из другого фрагмента через ViewModel?

    @SimpleName Автор вопроса
    в строке
    mRef = database.getReference().child(String.valueOf(model.getSelected()));

    надо заменить String.valueOf(model.getSelected()) на model.getSelected().getValue()
    Ответ написан
    Комментировать
  • Как исправить проблему при загрузке данных из Firebase database в RecyclerView фрагмента?

    @SimpleName Автор вопроса
    Надо изменить
    private ArrayList<GalleryGridObject> galleryList = new ArrayList<>();
    на private List<GalleryGridObject> galleryList; В итоге код фрагмента (или активити) должен получиться так
    В итоге код фрагмента (или активити) должен получиться так
    public class TestFragment extends Fragment {
    
    private List<GalleryGridObject> galleryList;
    private TestAdapter mAdapter;
    private RecyclerView recyclerView;
    private DatabaseReference mRef;
    private FirebaseDatabase database;
    
    public TestFragment() {
        // Required empty public constructor
    }
    
    
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        // Inflate the layout for this fragment
        View view = inflater.inflate(R.layout.fragment_coupons, container, false);
    
        recyclerView = view.findViewById(R.id.my_recycler_view);
        recyclerView.setHasFixedSize(true);
        LinearLayoutManager layoutManager = new LinearLayoutManager(getContext());
        layoutManager.setOrientation(LinearLayoutManager.VERTICAL);
        recyclerView.setLayoutManager(layoutManager);
        galleryList = new ArrayList<>();
    
        mAdapter = new TestAdapter(galleryList);
    
        database = FirebaseDatabase.getInstance();
        //mRef = database.getReference().child("Data");
        mRef = database.getReference("Data");
    
        mRef.addChildEventListener(new ChildEventListener() {
            @Override
            public void onChildAdded(@NonNull DataSnapshot dataSnapshot, @Nullable String s) {
                GalleryGridObject image = dataSnapshot.getValue(GalleryGridObject.class);
                galleryList.add(image);
                recyclerView.setAdapter(mAdapter);
            }
    
            @Override
            public void onChildChanged(@NonNull DataSnapshot dataSnapshot, @Nullable String s) {
    
            }
    
            @Override
            public void onChildRemoved(@NonNull DataSnapshot dataSnapshot) {
    
            }
    
            @Override
            public void onChildMoved(@NonNull DataSnapshot dataSnapshot, @Nullable String s) {
    
            }
    
            @Override
            public void onCancelled(@NonNull DatabaseError databaseError) {
    
            }
        });
    
        return view;
    }
    
    public class TestAdapter extends RecyclerView.Adapter<TestAdapter.ViewHolder>{
        private Context mContext;
        private List<GalleryGridObject> galleryArrayList;
    
        public TestAdapter( List<GalleryGridObject> galleryArrayList){
            //this.mContext=mContext;
            this.galleryArrayList=galleryArrayList;
        }
    
        @NonNull
        @Override
        public TestAdapter.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
            View itemView = LayoutInflater.from(parent.getContext())
                    .inflate(R.layout.item_coupons, parent, false);
    
            return new TestAdapter.ViewHolder(itemView);
        }
    
        @Override
        public void onBindViewHolder(@NonNull TestAdapter.ViewHolder holder, int position) {
            //GalleryGridObject gallery = galleryArrayList.get(position);
            //Glide.with(mContext).load(galleryArrayList.get(position).getImage()).into(holder.imageGallery);
            holder.textView.setText(galleryArrayList.get(position).getTitle());
            Picasso.get().load(galleryArrayList.get(position).getImage()).into(holder.imageGallery);
        }
    
        @Override
        public int getItemCount() {
            if(galleryArrayList==null) return 0;
            return galleryArrayList.size();
        }
    
        public class ViewHolder extends RecyclerView.ViewHolder {
    
            public ImageView imageGallery;
            public TextView textView;
    
            public ViewHolder(View view) {
                super(view);
                imageGallery = itemView.findViewById(R.id.coupons_picture);
                textView = itemView.findViewById(R.id.coupons_title);
            }
        }
    }
    
    }

    Вот модель для RecyclerView (обязательно нужен пустой конструктор)
    @IgnoreExtraProperties
    public class GalleryGridObject {
    
    String title, image;
    
    public GalleryGridObject () {
        // Default constructor required for calls to DataSnapshot.getValue(User.class)
    }
    
    public GalleryGridObject(String title, String image) {
        this.title = title;
        this.image = image;
    }
    
    public String getTitle() {
        return title;
    }
    
    public void setTitle(String title) {
        this.title = title;
    }
    
    public String getImage() {
        return image;
    }
    
    public void setImage(String image) {
        this.image = image;
    }
    }


    Единственное, что я так и не понял, это почему картинки не должны лежать сразу в родительской папке (в моем случае Data, которую указываем в mRef = database.getReference("Data");), а должны иметь собственные папки, на подобии этого (тут вместо папки "Data" показана папка "KFC", но суть не меняется
    5c4d8fa39f25c136376594.png
    Ответ написан
    Комментировать