需要从FirebaseDatabase中将数据检索到Fragment [英] Need retrieve data from FirebaseDatabase to Fragment

查看:144
本文介绍了需要从FirebaseDatabase中将数据检索到Fragment的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在开发简单的项目。 CategoryFragment是MainActivity中第一个添加的片段。我期望从FireBase接收数据并使用RecyclerView显示。



在我的代码下面。该应用程序不会在启动过程中下降。没有任何错误。
我想我应该使用一些方法来达到我的目的,但是我是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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆