所以问题是,每当我为回收者视图设置空视图时,它总是显示空视图。我尝试遵循一些建议的解决方案,例如此 url 中的解决方案:FirebaseRecyclerAdapter with empty view,但问题是 Firebase 侦听器是异步的并在其自己的线程上运行。在设置空视图之前,片段的 onCreateView 方法已经返回视图,因此未正确设置空视图。还有其他方法可以实现 FirebaseRecyclerAdapter 的空视图设置吗?
以下是代码片段:
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
v = inflater.inflate(R.layout.activity_list, container, false);
initializeFilter();
Log.d("AttendanceFragment", filter.getTab() + "");
Firebase.setAndroidContext(getContext());
//filter(filter);
handleFilter();
if(getContext() != null) {
adapter = new AttendanceAdapter(Attendance.class, R.layout.list_item, AttendanceAdapter.AttendanceViewHolder.class, mDatabase);
mDatabase.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
Log.d("DATA_CHANGED", dataSnapshot.hasChildren() + "");
if(!dataSnapshot.hasChildren()){
Log.d("SETTING", setEmpty + "");
if(filter.getTab() == 1) {
empty = (TextView) v.findViewById(R.id.empty_view);
empty.setText("No finished attendance yet");
}
recView.setEmptyView(v.findViewById(R.id.empty_view));
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
Log.d("FIREBASE", recView.getAdapter().getItemCount() + "");
}
adapter.setOnItemClickListener(new AttendanceAdapter.OnItemClickListener() {
@Override
public void onItemClick(String name) {
Toast.makeText(getContext(), name, Toast.LENGTH_SHORT).show();
}
});
recView.setAdapter(adapter);
return v;
}
它基本上检查 dataSnapshot 是否没有任何孩子,如果它没有任何孩子,它会设置空视图。再次出现的问题是 setAdapter() 在 onDataChange() 之前先被调用。
放在recView.setAdapter(adapter)
后面recView.setEmptyView(v.findViewById(R.id.empty_view))
以获得更好的练习使用ProgressBar
或ProgressDialog
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句