Firebase Recycler Adapter未显示任何内容

时间:2018-02-20 12:03:31

标签: android firebase-realtime-database android-recyclerview recycler-adapter firebaseui

我正在创建一个片段,我在recyclerview中显示一些数据。但它没有显示任何错误的事件。 我没有使用firebase的任何@PropertyName 这是我的firebase数据库快照

enter image description here

NewCustomer.java(我的模块类)

package com.example.lenovo.jdstudio;

import java.util.Map;

public class NewCustomer {
    private String fName, lName, email, phone, photodesc, status;
    private Map time;

    public NewCustomer() {}

    public NewCustomer(String fName, String lName, String email, String phone, String photodesc, String status, Map time) {
        this.fName = fName;
        this.lName = lName;
        this.email = email;
        this.phone = phone;
        this.photodesc = photodesc;
        this.status = status;
        this.time = time;
    }

    public String getfName() {return fName;}

    public String getlName() {return lName;}

    public String getEmail() {return email;}

    public String getPhone() {return phone;}

    public String getPhotodesc() {return photodesc;}

    public String getStatus() {return status;}

    public Map getTime() {return time;}
}

Updaterder.java

public class UpdateOrder extends Fragment {

    private View mView;
    @BindView(R.id.customerDetailsRecyclerView)
    RecyclerView mCustmoerDetails;

    private FirebaseDatabase mDatabase;
    private DatabaseReference mCustomerDatabase;
    private FirebaseRecyclerAdapter firebaseRecyclerAdapter;
    private LinearLayoutManager mManager;
    private static final String TAG = UpdateOrder.class.getSimpleName();
    public UpdateOrder() {
        // Required empty public constructor
    }


    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        // Inflate the layout for this fragment
        mView = inflater.inflate(R.layout.fragment_update_order, container, false);
        ButterKnife.bind(this,mView);

        mCustmoerDetails.setHasFixedSize(true);
        mManager = new LinearLayoutManager(getActivity());
        mCustmoerDetails.setLayoutManager(mManager);

        Log.e(TAG,"Before firebaseoption");

        mDatabase = FirebaseDatabase.getInstance();
        mCustomerDatabase = mDatabase.getReference().child("new_customer");
        FirebaseRecyclerOptions<NewCustomer> options =
                new FirebaseRecyclerOptions.Builder<NewCustomer>().
                        setQuery(mCustomerDatabase,NewCustomer.class).
                        build();

        //        Log.e(TAG,"OnStart");

        firebaseRecyclerAdapter = new FirebaseRecyclerAdapter<NewCustomer, CustDetailHolder> (options){
            @Override
            protected void onBindViewHolder(@NonNull CustDetailHolder holder, int position, @NonNull NewCustomer model) {
                holder.setFname(model.getfName());
                holder.setLname(model.getlName());
                holder.setPhotoDetail(model.getPhotodesc());
            }

            @Override
            public CustDetailHolder onCreateViewHolder(ViewGroup parent, int viewType) {
                View view = LayoutInflater.from(parent.getContext())
                        .inflate(R.layout.single_order_details, parent, false);
                Log.e(TAG,"oncreate is called");

                return new CustDetailHolder(view);
            }
        };
        mCustmoerDetails.setAdapter(firebaseRecyclerAdapter);

        return mView;
    }

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

    }

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

    //ViewHolder class
    public static class CustDetailHolder extends RecyclerView.ViewHolder {
        View mView;

        public CustDetailHolder(View itemView) {
            super(itemView);
            mView = itemView;
        }

        public void setFname(String  name) {
            TextView FName = (TextView) mView.findViewById(R.id.cust_Fname);
            FName.setText(name);
        }


        public void setLname(String name) {
            TextView LName = (TextView) mView.findViewById(R.id.cust_Lname);
            LName.setText(name);
        }

        public void setPhotoDetail(String photoDetail) {
            TextView photo_details = (TextView) mView.findViewById(R.id.photo_Details);
            photo_details.setText(photoDetail);
        }

        public void setOrderSpinner(String status){

        }
    }


}

single_order_detail.xml

<?xml version="1.0" encoding="utf-8"?>
<android.support.v7.widget.CardView
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_margin="20dp">

    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        >

        <LinearLayout
            android:id="@+id/cust_name"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:orientation="horizontal"
            android:paddingLeft="@dimen/dimen_15dp">

            <TextView
                android:id="@+id/cust_Fname"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="Fname"
                android:textSize="16dp"
                android:textStyle="bold" />

            <TextView
                android:id="@+id/cust_Lname"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:paddingLeft="3dp"
                android:text="Lname"
                android:textSize="16dp"
                android:textStyle="bold" />

        </LinearLayout>


        <TextView
            android:id="@+id/order_status"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentStart="true"
            android:layout_below="@+id/cust_name"
            android:paddingLeft="@dimen/dimen_15dp"
            android:paddingTop="@dimen/dimen_10dp"
            android:text="order Status goes here"
            android:textSize="15sp" />

        <Spinner
            android:id="@+id/order_status_spinner"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_below="@id/cust_name"
            android:layout_toRightOf="@id/order_status"
            />

        <TextView
            android:id="@+id/textView"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentStart="true"
            android:layout_below="@+id/order_status"
            android:paddingLeft="15dp"
            android:paddingTop="@dimen/dimen_10dp"
            android:text="Photo Description:"
            android:textSize="15sp" />

        <TextView
            android:id="@+id/photo_Details"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignEnd="@+id/textView"
            android:layout_below="@+id/textView"
            android:paddingRight="@dimen/dimen_15dp"
            android:paddingTop="@dimen/dimen_5dp"
            android:text="4x6 id and passport"
            android:textSize="12sp" />
    </RelativeLayout>

</android.support.v7.widget.CardView>

fragment_update_order.xml

<RelativeLayout 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="com.example.lenovo.jdstudio.UpdateOrder">

    <android.support.v7.widget.RecyclerView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/customerDetailsRecyclerView">

    </android.support.v7.widget.RecyclerView>
</RelativeLayout>

谢谢你看到这篇文章。等待答案。 如果我做错了,请纠正我。 不要在没有阅读的情况下将其标记为重复。 我附上了所有听众。

4 个答案:

答案 0 :(得分:1)

正如我在您的数据库中看到的那样,您的字段与您的模型类中的字段相对应。要解决此问题,请删除旧数据,添加新数据,您的问题将得到解决。

正如我在您的代码中看到的,您正在使用CustDetailHolder类的声明,即static关键字,这是错误的。你只需要:

public class CustDetailHolder extends RecyclerView.ViewHolder

同时删除ButterKnife.bind(this,mView);,因为我发现您在代码中没有使用它。

答案 1 :(得分:1)

我遇到了与您描述的问题相同的问题,感谢您分享问题和评论。我跟踪了他们,发现应该从回收者视图中删除setHasFixedSize(true)。另外,我应该分别使用start和stop监听适配器来覆盖onStart和onStop方法。这就解决了我的在回收站视图中不显示任何内容的问题。

P.S:我知道您很早就找到了答案并解决了您的问题。我只是在这里分享这个结论,因为它不能从讨论中直接提取出来。

答案 2 :(得分:0)

模型类中的字符串:

fName
lName

必须与数据库中的相同,在您的数据库中,您拥有:

FName
LName

对于任何人检查:

正如我在评论中所说:

  

@Aakash保留它,但是把它改为mCustmoerDetails.setHasFixedSize(false) - 昨天Peter Haddad

OP必须添加mCustmoerDetails.setHasFixedSize(false)而不是mCustmoerDetails.setHasFixedSize(true)

或删除mCustmoerDetails.setHasFixedSize(true)

答案 3 :(得分:0)

男人也许你忘记打电话了 @override onStart(){}

中的firebaseRecyclerAdapter.startListening