需要从FirebaseDatabase中将数据检索到Fragment [英] Need retrieve data from FirebaseDatabase to Fragment
问题描述
在我的代码下面。该应用程序不会在启动过程中下降。没有任何错误。
我想我应该使用一些方法来达到我的目的,但是我是Firebase的新手。
public class CategoryFragment扩展Fragment {
public DatabaseReference mRootDB;
private RecyclerView mRecyclerView;
public FirebaseRecyclerAdapter< Category,CategoryViewHolder>适配器;
@Override
public void onActivityCreated(@Nullable Bundle savedInstanceState){
super.onActivityCreated(savedInstanceState);
mRootDB = FirebaseDatabase.getInstance()。getReference()。child(categories);
adapter = new FirebaseRecyclerAdapter< Category,CategoryViewHolder>(
Category.class,
R.layout.model_category,
CategoryViewHolder.class,
mRootDB)
{
@Override
protected void populateViewHolder(CategoryViewHolder viewHolder,Category model,int position){
viewHolder.setCategory(model.getName());
}
};
mRecyclerView.setAdapter(adapter);
$ b $ @ $可
@Override
public查看onCreateView(LayoutInflater inflater,ViewGroup容器,Bundle savedInstanceState){
查看rootView = inflater.inflate R.layout.frag_category,container,false);
mRecyclerView =(RecyclerView)rootView.findViewById(R.id.category_RV);
return rootView;
$ b $ public static class CategoryViewHolder extends RecyclerView.ViewHolder {
View mView;
TextView category_CV;
public CategoryViewHolder(View itemView){
super(itemView);
mView = itemView;
category_CV =(TextView)mView.findViewById(R.id.category_CV);
public void setCategory(String data){
category_CV.setText(data);
$ b 解决方案如果我是你,我不会重写onActivityCreated(),你可以在onCreateView()中创建并返回RecyclerView。您确定您拥有Firebase中的数据吗?你可以像这样覆盖parseSnapshot(),也许会放一个断点来确保返回的东西,如果是这样,那么你可能要检查你的RecyclerView自定义布局。
public class CategoryFragment extends Fragment {
public DatabaseReference mRootDB;
private RecyclerView mRecyclerView;
public FirebaseRecyclerAdapter< Category,CategoryViewHolder>适配器;
$ b @Nullable
@Override
public查看onCreateView(LayoutInflater inflater,ViewGroup容器,Bundle savedInstanceState){
查看rootView = inflater .inflate(R.layout.frag_category,container,false);
mRecyclerView =(RecyclerView)rootView.findViewById(R.id.category_RV);
mRootDB = FirebaseDatabase.getInstance()。getReference()。child(categories);
adapter = new FirebaseRecyclerAdapter< Category,CategoryViewHolder>(
Category.class,
R.layout.model_category,
CategoryViewHolder.class,
mRootDB)
{
@Override
protected Category parseSnapshot(DataSnapshot snapshot){
Category category = super.parseSnapshot(snapshot);
if(category!= null){
category.setId(snapshot.getKey());
}
返回类别;
$ b @Override
保护无效populateViewHolder(CategoryViewHolder viewHolder,类别模型,int位置){
viewHolder.setCategory(model.getName());
}
};
mRecyclerView.setAdapter(adapter);
return rootView;
$ b $ public static class CategoryViewHolder extends RecyclerView.ViewHolder {
View mView;
TextView category_CV;
public CategoryViewHolder(View itemView){
super(itemView);
mView = itemView;
category_CV =(TextView)mView.findViewById(R.id.category_CV);
public void setCategory(String data){
category_CV.setText(data);
}
}
}
I'm developing simple project. CategoryFragment is the first added fragment in MainActivity. I expect receive data from FireBase and display it with RecyclerView.
Below my code. The app doesn't fall during launching. There is no any error.
I guess I should use some method for my purpose, but I'm new in Firebase.
public class CategoryFragment extends Fragment {
public DatabaseReference mRootDB;
private RecyclerView mRecyclerView;
public FirebaseRecyclerAdapter<Category, CategoryViewHolder> adapter;
@Override
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
mRootDB = FirebaseDatabase.getInstance().getReference().child("categories");
adapter = new FirebaseRecyclerAdapter <Category, CategoryViewHolder>(
Category.class,
R.layout.model_category,
CategoryViewHolder.class,
mRootDB)
{
@Override
protected void populateViewHolder(CategoryViewHolder viewHolder, Category model, int position) {
viewHolder.setCategory(model.getName());
}
};
mRecyclerView.setAdapter(adapter);
}
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.frag_category, container, false);
mRecyclerView = (RecyclerView) rootView.findViewById(R.id.category_RV);
return rootView;
}
public static class CategoryViewHolder extends RecyclerView.ViewHolder {
View mView;
TextView category_CV;
public CategoryViewHolder(View itemView) {
super(itemView);
mView = itemView;
category_CV = (TextView) mView.findViewById(R.id.category_CV);
}
public void setCategory(String data){
category_CV.setText(data);
}
}
}
解决方案 I would not override onActivityCreated() if I were you, you can create and return the RecyclerView in the onCreateView(). Are you sure you have data in Firebase? You can override parseSnapshot() like this and maybe put a break point to make sure that something is coming back, and if it does then you may want to check your RecyclerView custom layout.
public class CategoryFragment extends Fragment {
public DatabaseReference mRootDB;
private RecyclerView mRecyclerView;
public FirebaseRecyclerAdapter<Category, CategoryViewHolder> adapter;
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.frag_category, container, false);
mRecyclerView = (RecyclerView) rootView.findViewById(R.id.category_RV);
mRootDB = FirebaseDatabase.getInstance().getReference().child("categories");
adapter = new FirebaseRecyclerAdapter <Category, CategoryViewHolder>(
Category.class,
R.layout.model_category,
CategoryViewHolder.class,
mRootDB)
{
@Override
protected Category parseSnapshot(DataSnapshot snapshot) {
Category category = super.parseSnapshot(snapshot);
if (category != null){
category.setId(snapshot.getKey());
}
return category;
}
@Override
protected void populateViewHolder(CategoryViewHolder viewHolder, Category model, int position) {
viewHolder.setCategory(model.getName());
}
};
mRecyclerView.setAdapter(adapter);
return rootView;
}
public static class CategoryViewHolder extends RecyclerView.ViewHolder {
View mView;
TextView category_CV;
public CategoryViewHolder(View itemView) {
super(itemView);
mView = itemView;
category_CV = (TextView) mView.findViewById(R.id.category_CV);
}
public void setCategory(String data){
category_CV.setText(data);
}
}
}
这篇关于需要从FirebaseDatabase中将数据检索到Fragment的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!