Firestore RecyclerView не отображает элементы в приложении - PullRequest
0 голосов
/ 25 января 2020

Я использую FireStore RecyclelerView, но элементы не отображаются в приложении. Я не знаю, в чем проблема. Я использовал это раньше в других проектах, но все же я не понимаю ошибку, которую я сделал.

Фрагмент дисплея:

import android.os.Bundle;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.fragment.app.Fragment;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;

import com.firebase.ui.firestore.FirestoreRecyclerOptions;
import com.google.firebase.firestore.CollectionReference;
import com.google.firebase.firestore.FirebaseFirestore;
import com.google.firebase.firestore.Query;

import butterknife.BindView;
import butterknife.ButterKnife;


public class HospitalFragment extends Fragment {

    @BindView(R.id.hospitalList)
    RecyclerView hospitalList;

    CollectionReference medcenters;
    FirebaseFirestore ref;

    HospitalAdapter hospitalAdapter;

    private String TAG="TAG";

    public HospitalFragment() {
        // Required empty public constructor
    }

    @Nullable
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        View view=inflater.inflate(R.layout.fragment_hospital, container, false);
        ButterKnife.bind(this,view);
        return view;
    }

    @Override
    public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
        super.onViewCreated(view, savedInstanceState);

        Log.e(TAG, "onViewCreated: "+hospitalList);

        rvSetUp();
        dbSetup();
    }

    private void dbSetup() {
        ref=FirebaseFirestore.getInstance();
        medcenters=ref.collection("MedicalCenters");
        Query query=medcenters.orderBy("name");
        FirestoreRecyclerOptions<RVCell> options=new FirestoreRecyclerOptions.Builder<RVCell>()
                .setQuery(query,RVCell.class)
                .build();
        hospitalAdapter=new HospitalAdapter(options,getContext());
        hospitalList.setAdapter(hospitalAdapter);
    }

    private void rvSetUp() {

        hospitalList.setHasFixedSize(true);
        RecyclerView.LayoutManager layoutManager=new LinearLayoutManager(getContext());
        hospitalList.setLayoutManager(layoutManager);
    }

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

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

Адаптер. Это адаптер, который расширяет возможности повторного просмотра. Адаптер:

import android.content.Context;
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.firestore.FirestoreRecyclerAdapter;
import com.firebase.ui.firestore.FirestoreRecyclerOptions;

public class HospitalAdapter extends FirestoreRecyclerAdapter<RVCell,HospitalAdapter.ViewHolder> {

    Context context;

    public HospitalAdapter(@NonNull FirestoreRecyclerOptions<RVCell> options, Context context){
        super(options);
        this.context=context;
    }

    @Override
    protected void onBindViewHolder(@NonNull ViewHolder holder, int position, @NonNull RVCell model)
    {
        holder.location.setText(model.getLocation());
        holder.title.setText(model.getMCName());
        holder.phone.setText(model.getPhno());
        holder.time.setText(model.getTime());
    }

    @NonNull
    @Override
    public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        View v = LayoutInflater.from(context).inflate(R.layout.rv_cell, parent, false);
        return new ViewHolder(v);
    }

    public class ViewHolder extends RecyclerView.ViewHolder {

        TextView title,location,time,phone;

        public ViewHolder(@NonNull View itemView) {
            super(itemView);
            title=itemView.findViewById(R.id.title);
            location=itemView.findViewById(R.id.location);
            time=itemView.findViewById(R.id.time);
            phone=itemView.findViewById(R.id.phno);
        }
    }

}

Cell. Это класс POJO:

public class RVCell {

    String MCName,location,time,phno,picurl,locurl;

    public String getMCName() {
        return MCName;
    }

    public void setMCName(String MCName) {
        this.MCName = MCName;
    }

    public String getLocation() {
        return location;
    }

    public void setLocation(String location) {
        this.location = location;
    }

    public String getTime() {
        return time;
    }

    public void setTime(String time) {
        this.time = time;
    }

    public String getPhno() {
        return phno;
    }

    public void setPhno(String phno) {
        this.phno = phno;
    }

    public String getPicurl() {
        return picurl;
    }

    public void setPicurl(String picurl) {
        this.picurl = picurl;
    }

    public String getLocurl() {
        return locurl;
    }

    public void setLocurl(String locurl) {
        this.locurl = locurl;
    }
}

Основной макет. RecyclerView Layout:

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".HospitalFragment">

    <androidx.recyclerview.widget.RecyclerView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/hospitalList"/>

</FrameLayout>

Расположение ячеек. Это макет, используемый для отображения элементов в представлении переработчика:

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout
    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"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_marginTop="8dp">

    <Button
        android:id="@+id/button"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:text="Location"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/container"
        android:background="@color/card_bg_color" />

    <RelativeLayout
        android:id="@+id/container"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_marginStart="24dp"
        android:background="@drawable/card_bg"
        android:paddingBottom="16dp"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.0"
        app:layout_constraintStart_toStartOf="parent">

        <TextView
            android:id="@+id/location"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_below="@id/title"
            android:layout_alignStart="@+id/title"
            android:layout_alignLeft="@id/title"
            android:layout_marginTop="8dp"
            android:layout_marginRight="16dp"
            android:lineSpacingExtra="8dp"
            android:text="Location:"
            android:textColor="@color/content_text_color" />

        <TextView
            android:id="@+id/time"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_below="@id/location"
            android:layout_alignStart="@+id/location"
            android:layout_alignLeft="@id/location"
            android:layout_marginTop="8dp"
            android:layout_marginRight="16dp"
            android:lineSpacingExtra="8dp"
            android:text="Time:"
            android:textColor="@color/content_text_color" />

        <TextView
            android:id="@+id/phno"
            android:layout_width="333dp"
            android:layout_height="wrap_content"
            android:layout_below="@id/location"
            android:layout_alignStart="@+id/time"
            android:layout_alignLeft="@id/time"
            android:layout_marginStart="-2dp"
            android:layout_marginLeft="-2dp"
            android:layout_marginTop="34dp"
            android:layout_marginRight="16dp"
            android:lineSpacingExtra="8dp"
            android:text="Phone:"
            android:textColor="@color/content_text_color" />

        <TextView
            android:id="@+id/title"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentStart="true"
            android:layout_alignParentLeft="true"
            android:layout_alignParentTop="true"
            android:layout_marginStart="40dp"
            android:layout_marginLeft="40dp"
            android:layout_marginTop="20dp"
            android:text="Simple Title Text "
            android:textColor="@color/colorPrimary"
            android:textStyle="bold" />

    </RelativeLayout>

    <ImageView
        android:id="@+id/img_user"
        android:layout_width="36dp"
        android:layout_height="36dp"
        android:layout_marginStart="8dp"
        android:layout_marginLeft="8dp"
        android:layout_marginTop="16dp"
        android:layout_marginEnd="8dp"
        android:layout_marginRight="8dp"
        app:layout_constraintEnd_toStartOf="@+id/container"
        app:layout_constraintStart_toStartOf="@+id/container"
        app:layout_constraintTop_toTopOf="@+id/container"
        app:srcCompat="@mipmap/ic_launcher" />

</androidx.constraintlayout.widget.ConstraintLayout>

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

1 Ответ

0 голосов
/ 28 января 2020

Какую информацию имеет ваш TAG? Он должен иметь название вашей деятельности, попробуйте это:

личное состояние c конечная строка TAG = „HospitalFragment“;

...