我正在学习使用片段,昨天我尝试使用片段制作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);
}
}
据我所知,这似乎没问题,应该起作用。当我运行该应用程序时,它不会崩溃或出现错误,因此我真的不知道在哪里寻找可能的问题。
答案 0 :(得分:0)
我猜您正在关注某种教程。 I found one that was similar,略过后可能就是问题所在。
您需要在onStop中添加侦听器以注销Firebase适配器。将此添加到EventListFragment。
@Override
protected void onStop() {
super.onStop();
adapter.stopListening();
}