2017-02-21 24 views
0

我正在開發簡單的項目。 CategoryFragment是MainActivity中第一個添加的片段。我期望從FireBase接收數據並使用RecyclerView顯示它。需要從FirebaseDatabase檢索數據到片段

下面我的代碼。該應用程序不會在啓動期間掉落。沒有任何錯誤。 我想我應該使用一些方法來達到我的目的,但我是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(),你可以在onCreateView()中創建並返回RecyclerView。您確定您擁有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); 
     } 

    } 
}