为什么我用Firebase中的数据填充的Recyclerview显示空白?

时间:2019-11-20 15:51:31

标签: android firebase android-fragments android-recyclerview

我正在学习使用片段,昨天我尝试使用片段制作Recyclerview,并使用Firebase中的数据填充它们。我95%确信它昨天有效,因为我对其进行了测试并且它向我显示了数据。但是今天,当我尝试运行我的应用程序时,它没有显示任何数据,只是一个空白屏幕。

我今天迁移到androidx,这可能是问题吗?

2.7.3

EventViewHolder类

public class EventListFragment extends Fragment {

    private static final String TAG = "EventListFragment";

    private View listItemView;
    private RecyclerView myItemList;
    private DatabaseReference databaseReference;
    private FirebaseRecyclerOptions<Event> options;
    private FirebaseAuth mAuth;
    private String currentUserID;

    public EventListFragment(){

    }

    @Nullable
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        listItemView = inflater.inflate(R.layout.fragment_events_list,container,false);

        myItemList = listItemView.findViewById(R.id.item_list);
        myItemList.setLayoutManager(new LinearLayoutManager(getContext()));

        mAuth = FirebaseAuth.getInstance();
        currentUserID = mAuth.getCurrentUser().getUid();
        databaseReference = FirebaseDatabase.getInstance().getReference().child("events");

        return listItemView;
    }

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

        options = new FirebaseRecyclerOptions.Builder<Event>()
                .setQuery(databaseReference, Event.class)
                .build();

        FirebaseRecyclerAdapter<Event, EventViewHolder> adapter
                = new FirebaseRecyclerAdapter<Event, EventViewHolder>(options) {
            @Override
            protected void onBindViewHolder(@NonNull EventViewHolder eventViewHolder, int i, @NonNull Event event) {
                eventViewHolder.eventName.setText(event.getName());
                eventViewHolder.eventDate.setText(event.getDate());
                eventViewHolder.eventOrganisator.setText(event.getOrganisator());

                Log.d(TAG, "onBindViewHolder: " + event.getName());
            }

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

        myItemList.setAdapter(adapter);
        adapter.startListening();
    }
}

EventListActivity

public class EventViewHolder extends ViewHolder {

    public TextView eventName;
    public TextView eventOrganisator;
    public TextView eventDate;

    public EventViewHolder(@NonNull View itemView) {
        super(itemView);

        eventName = itemView.findViewById(R.id.eventName);
        eventOrganisator = itemView.findViewById(R.id.eventOrganisator);
        eventDate = itemView.findViewById(R.id.eventDate);
    }
}

据我所知,这似乎没问题,应该起作用。当我运行该应用程序时,它不会崩溃或出现错误,因此我真的不知道在哪里寻找可能的问题。

1 个答案:

答案 0 :(得分:0)

我猜您正在关注某种教程。 I found one that was similar,略过后可能就是问题所在。

您需要在onStop中添加侦听器以注销Firebase适配器。将此添加到EventListFragment。

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