2017-02-21 21 views
0

Я разрабатываю простой проект. CategoryFragment - это первый добавленный фрагмент в MainActivity. Я ожидаю получить данные из FireBase и отобразить их с помощью RecyclerView.Нужно извлекать данные из FirebaseDatabase в Fragment

Под моим кодом. Приложение не падает при запуске. Ошибок нет. Думаю, я должен использовать какой-то метод для своей цели, но я новичок в 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); 
     } 

    } 
} 

ответ

1

Я бы не переопределить onActivityCreated(), если я вам, вы можете создать и вернуть RecyclerView в onCreateView(). У вас есть данные в Firebase? Вы можете переопределить parseSnapshot() следующим образом и, возможно, поставить точку останова, чтобы убедиться, что что-то вернется, и если это произойдет, вы можете проверить свой собственный макет RecyclerView.

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); 
     } 

    } 
}