Данные не отображаются в recyclerview из firebase с использованием пользовательского интерфейса firebase - PullRequest
0 голосов
/ 20 июня 2020

Я использую интерфейс firebase для загрузки данных из базы данных firebase в представление ресайклера, но данные не отображаются внутри вида ресайклера. Это мой фрагмент

import android.os.Bundle;

import androidx.annotation.Nullable;
import androidx.databinding.DataBindingUtil;
import androidx.databinding.ViewDataBinding;
import androidx.fragment.app.Fragment;

import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

import com.firebase.ui.database.FirebaseRecyclerOptions;
import com.google.firebase.database.FirebaseDatabase;
import com.infinity.houseestimatorandmodeler.R;

import com.infinity.houseestimatorandmodeler.databinding.FragmentBuildersBinding;

public class BuilderFragment extends Fragment {
private BuilderAdapter adapter;

public BuilderFragment() {
    // Required empty public constructor


}

@Override
public void onStart() {
    super.onStart();
    adapter.startListening();
}

@Override
public void onStop() {
    super.onStop();
    adapter.stopListening();
}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    // Inflate the layout for this fragment


   FragmentBuildersBinding databinding= DataBindingUtil.inflate(inflater, R.layout.fragment_builders, container, false);
    FirebaseRecyclerOptions<buildersModel> options =
            new FirebaseRecyclerOptions.Builder<buildersModel>()
                    .setQuery(FirebaseDatabase.getInstance().getReference().child("builders"), buildersModel.class)
                    .build();

    adapter = new BuilderAdapter(options);

    databinding.buildersRecyclerView.setAdapter(adapter);

    return  databinding.getRoot();

}


}`

это мой класс адаптера, который адаптирует данные для отображения в представлении ресайклера

import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;

import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;

import com.firebase.ui.database.FirebaseRecyclerAdapter;
import com.firebase.ui.database.FirebaseRecyclerOptions;
import com.infinity.houseestimatorandmodeler.R;

public class BuilderAdapter extends FirebaseRecyclerAdapter<buildersModel, BuilderAdapter.BuilderViewHolder> {


    public BuilderAdapter(@NonNull FirebaseRecyclerOptions<buildersModel> options) {
        super(options);
    }


    @Override
    protected void onBindViewHolder(@NonNull BuilderViewHolder holder, int i, @NonNull buildersModel builder) {
        holder.name.setText(builder.getName());
        holder.builderClass.setText(builder.getBuilderClass());
        holder.address.setText(builder.getAddress());
    }

    @NonNull
    @Override
    public BuilderViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        View view = LayoutInflater.from(parent.getContext())
                .inflate(R.layout.builders_card, parent, false);
        return new BuilderViewHolder(view);
    }

    class BuilderViewHolder extends RecyclerView.ViewHolder{

        TextView name, builderClass, address;

        public BuilderViewHolder(@NonNull View itemView) {
            super(itemView);
            name = itemView.findViewById(R.id.nameofbuilder);
            builderClass = itemView.findViewById(R.id.classOfBuilder);
            address = itemView.findViewById(R.id.address);
        }
    }
}

это мой класс модели для данных, поступающих из firebase `

class buildersModel
{
    public String getAddress() {
        return address;
    }

    public void setAddress(String address) {
        this.address = address;
    }

    public String getBuilderClass() {
        return builderClass;
    }

    public void setBuilderClass(String builderClass) {
        this.builderClass = builderClass;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public buildersModel(String address, String builderClass, String name) {
        this.address = address;
        this.builderClass = builderClass;
        this.name = name;
    }

    String address;
    String builderClass;
    String name;}

это моя база данных firebase

вид карты для отдельного элемента в виде ресайклера

 <?xml version="1.0" encoding="utf-8"?>
<androidx.cardview.widget.CardView
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:background="@drawable/rounded_cards"
    android:layout_height="wrap_content"
    android:layout_margin="10dp">



    <LinearLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:orientation="horizontal">

        <androidx.appcompat.widget.AppCompatImageView
            android:layout_width="90dp"
            android:layout_height="90dp"
            android:layout_margin="20dp"
            android:src="@drawable/ic_builder" />

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:orientation="vertical"
            android:background="@drawable/rounded_cards">

            <TextView

                android:id="@+id/nameofbuilder"
                android:layout_marginTop="8dp"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:fontFamily="@font/baloo"
                android:textSize="20dp"
                android:padding="2dp"
                android:text="Abdul Shakoor"/>

            <TextView

                android:id="@+id/classOfBuilder"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_margin="5dp"
                android:textSize="15sp"
                android:textColor="#342C2C"
                android:padding="2dp"
                android:text="Location Islambad"/>
            <TextView

                android:id="@+id/address"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:textSize="15sp"
                android:textColor="#342C2C"
                android:padding="2dp"
                android:text="Address : I10 Islamabad near Rahimia mosque"/>

        </LinearLayout>
    </LinearLayout>



</androidx.cardview.widget.CardView>

макет ресайклера

<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
>

<data>

</data>

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">
    <ImageView
        android:layout_width="match_parent"
        android:layout_height="250dp"
        android:src="@drawable/ic_builders"
        android:background="#75CDDC"
        />

    <androidx.recyclerview.widget.RecyclerView
        android:id="@+id/buildersRecyclerView"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager"/>


</LinearLayout>

1 Ответ

0 голосов
/ 20 июня 2020

Вы не установили RecyclerView LayoutManger, вы можете установить его в своем макете

<androidx.recyclerview.widget.RecyclerView
    ....
     app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager"

или во фрагменте

databinding.buildersRecyclerView.setLayoutManager(new LinearLayoutManager(requireActivity()));
...