FirebaseRecyclerAdapter未在Fragment中显示数据

时间:2016-09-08 16:21:40

标签: android android-fragments firebase firebase-realtime-database firebaseui

我有一个片段,我正在尝试使用compile 'com.firebaseui:firebase-ui:0.4.2'中的FirebaseRecyclerAdapter显示ListView。

My Fragment代码如下:

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;
    }
}

RecyclerView中有21行显示。

注意:一旦我第一次安装应用程序,然后将数据加载到recyclerview(并且在logcat中有图像链接从图像链接到的位置),但之后数据从未加载到应用程序中。

我真的很努力让它排序,但似乎没有任何帮助。

2 个答案:

答案 0 :(得分:0)

同样的问题发生在我身上。只需删除exefile

即可

答案 1 :(得分:0)

有时Recycleview的大小存在问题 我也遇到了与设置

相同的问题
android:layout_width="match_parent"
android:layout_height="match_parent"

只需将heightwidth设置为match_parent