FirebaseRecyclerAdapter 未在片段中显示数据

FirebaseRecyclerAdapter not showing data in Fragment

我有一个片段,我在其中尝试使用 compile 'com.firebaseui:firebase-ui:0.4.2'.

中的 FirebaseRecyclerAdapter 显示 ListView

我的片段代码是这样的:

public class HomeFragment extends Fragment {

    private RecyclerView services_list;
    private DatabaseReference mDatabase;


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

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

        View view = inflater.inflate(R.layout.fragment_home, container, false);
        // Inflate the layout for this fragment
        return view;
    }

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

        mDatabase = FirebaseDatabase.getInstance().getReference().child("AllServices");
        mDatabase.keepSynced(true);

        services_list = (RecyclerView) view.findViewById(R.id.services_list);
        services_list.setHasFixedSize(true);
        services_list.setLayoutManager(new LinearLayoutManager(getContext()));


    }

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

        FirebaseRecyclerAdapter<Services, ServiceViewHolder> firebaseRecyclerAdapter = new FirebaseRecyclerAdapter<Services, ServiceViewHolder>(
                Services.class,
                R.layout.service_row,
                ServiceViewHolder.class,
                mDatabase
        ) {
            @Override
            protected void populateViewHolder(ServiceViewHolder viewHolder, Services model, final int position) {

                viewHolder.setServiceName(model.getName());
                viewHolder.setServicePrice(model.getPrice());
                viewHolder.setImage(getContext(), model.getImageUrl());

                viewHolder.service_name_textview.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View view) {
                        Toast.makeText(getContext(), "Clicked on Service Name "+(position+1), Toast.LENGTH_SHORT).show();
                    }
                });

                viewHolder.service_price_text_view.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View view) {
                        Toast.makeText(getContext(), "Clicked on Service Price "+(position+1), Toast.LENGTH_SHORT).show();
                    }
                });

                viewHolder.service_image.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View view) {
                        Toast.makeText(getContext(), "Clicked on Service Image "+(position+1), Toast.LENGTH_SHORT).show();
                    }
                });

            }
        };

        services_list.setAdapter(firebaseRecyclerAdapter);


    }

    public static class ServiceViewHolder extends RecyclerView.ViewHolder
    {

        View mView;
        TextView service_name_textview;
        TextView service_price_text_view;
        ImageView service_image;

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

            mView = itemView;
        }

        public void setServiceName(String title)
        {
            service_name_textview = (TextView) mView.findViewById(R.id.service_name_textview);
            service_name_textview.setText(title);
        }

        public void setServicePrice(String desc)
        {
            service_price_text_view = (TextView) mView.findViewById(R.id.service_price_text_view);
            service_price_text_view.setText(desc);
        }

        public void setImage(final Context ctx, final String image)
        {
            service_image = (ImageView) mView.findViewById(R.id.service_image);

            //Picasso.with(ctx).load(image).into(post_image);

            Picasso.with(ctx).load(image).networkPolicy(NetworkPolicy.OFFLINE).into(service_image, new Callback() {
                @Override
                public void onSuccess() {

                }

                @Override
                public void onError() {
                    Picasso.with(ctx).load(image).into(service_image);
                }
            });
        }


    }
}

我的 Services.java 代码是这样的:

public class Services {

    private String Name;
    private String ImageUrl;
    private String Price;

    public Services() {
    }

    public Services(String name, String imageUrl, String price) {
        Name = name;
        ImageUrl = imageUrl;
        Price = price;
    }

    public String getName() {
        return Name;
    }

    public void setName(String name) {
        Name = name;
    }

    public String getImageUrl() {
        return ImageUrl;
    }

    public void setImageUrl(String imageUrl) {
        ImageUrl = imageUrl;
    }

    public String getPrice() {
        return Price;
    }

    public void setPrice(String price) {
        Price = price;
    }
}

有 21 行要显示到 RecyclerView 中。

注意:有一次当我第一次安装应用程序时,数据被加载到 recyclerview 中(并且在 logcat 中有图像 link 从下载图像的地方)但是之后,数据从未加载到应用程序中。

我真的很努力地整理它,但似乎无济于事。

我遇到了同样的问题。只需删除 service_list.setHasFixedSize(true).

有时 Recycleview 的大小会出现问题 我也遇到了同样的问题,我通过设置

修复了它
android:layout_width="match_parent"
android:layout_height="match_parent"

只需将 heightwidth 设置为 match_parent