1

Fragment.java

public class RuteEfectuateFragment extends Fragment {

View v;
RecyclerView mRecyclerView;
FirebaseDatabase mFirebaseDatabase;
DatabaseReference mRef;
private FirebaseRecyclerAdapter<Model, ViewHolder> firebaseRecyclerAdapter;
final Context context = this.getContext();

@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {

    ((ProfileActivity) Objects.requireNonNull(getActivity())).setActionBarTitle("Rute efectuate");

    v = inflater.inflate(R.layout.fragment_rute_efectuate, container, false);

    mRecyclerView = v.findViewById(R.id.recyclerView);
    mRecyclerView.setHasFixedSize(true);
    mRecyclerView.setLayoutManager(new LinearLayoutManager(getActivity()));

    mFirebaseDatabase = FirebaseDatabase.getInstance();
    mRef = mFirebaseDatabase.getReference("Rute");

    return v;
}

@Override
public void onStart() {
    super.onStart();
    firebaseRecyclerAdapter = new FirebaseRecyclerAdapter<Model, ViewHolder>(Model.class, R.layout.card_layout, ViewHolder.class, mRef){
        @Override
        protected void populateViewHolder(ViewHolder viewHolder, Model model, final int position) {
            viewHolder.setDetails(getContext(), model.getTaraPlecare(), model.getTaraDestinatie());

            viewHolder.itemView.setOnClickListener(new View.OnClickListener(){

                @Override
                public void onClick(View v) {
                    // Intent intent = new Intent(Fridge.this, Show.class);
                    //  startActivity(intent);
                }
            });
        }
    };

    RecyclerView.LayoutManager mLayoutManager = new GridLayoutManager(getActivity(), 1);
    mRecyclerView.setLayoutManager(mLayoutManager);
    mRecyclerView.setAdapter(firebaseRecyclerAdapter);
}}

Viewholder.java

public class ViewHolder extends RecyclerView.ViewHolder {

private View mView;

public ViewHolder(View itemView) {
    super(itemView);

    mView = itemView;
}

public void setDetails(Context ctx, String TaraPlecare, String TaraDestinatie){
    TextView mTaraPlecare = mView.findViewById(R.id.rTitleTv);
    TextView mTaraDestinatie = mView.findViewById(R.id.rDateTv);

    mTaraPlecare.setText(TaraPlecare);
    mTaraDestinatie.setText(TaraDestinatie);
}}

Can you tell me please why RecyclerView doesn't appear? It appears just when keyboard is opened and I close it and I can't find the reason. If it is necessary I can record how the RecyclerView appears by hiding the keyboard. I tried also tu find a similar question, but I couldn't find.

simpller
  • 317
  • 1
  • 2
  • 14
  • Change this to `false`: `mRecyclerView.setHasFixedSize(false);` and does in your adapter layout `R.layout.card_layout` root view has `height="match_parent"`? If does change it to `wrap_content` – Yupi Mar 02 '19 at 23:25
  • @Yupi thank you very much, the problem was mRecyclerView.setHasFixedSize(false); – simpller Mar 03 '19 at 08:15
  • **[This](https://stackoverflow.com/questions/49383687/how-can-i-retrieve-data-from-firebase-to-my-adapter/49384849)** is a recommended way in which you can retrieve data from a Firebase Realtime database and display it in a `RecyclerView` using `FirebaseRecyclerAdapter`. – Alex Mamo Mar 03 '19 at 11:01

1 Answers1

1

When using Firebase database and RecyclerView, Firebase database requires to fixed size of RecyclerView be false. I think because Firebase Database is asynchronous and that means RecyclerView will get first an empty adapter and after data is fetched from database, it will be than populated with data.

That affects the size, so if you put fixed size to true it will fail to calculate the size, so that is why it needs false in fixed size. So solution is: mRecyclerView.setHasFixedSize(false);

Yupi
  • 4,402
  • 3
  • 18
  • 37