2016-05-24 3 views
3

私はListViewからRecyclerViewに切り替えました。Firebaseのデータを使ってRecyclerViewアイテムを動的に追加します。しかし、私はRecyclerViewを正常に生成できません。動的RecyclerViewでデータが取り込まれない

現在、画面は空白であり、CardViewアイテムはビューに追加されていません。私はRecyclerViewアダプタに問題があると仮定しています。

マイリスナー、私はここでmCommentArrayListに追加して、後で私のRecyclerViewアダプタで、このデータからプル:

ここ
mUpdateRef.addListenerForSingleValueEvent(new ValueEventListener() { 
     @Override 
     public void onDataChange(DataSnapshot dataSnapshot) { 
      setImage(dataSnapshot); 
      setQuestion(dataSnapshot); 
      createInitialCommentIDArray(dataSnapshot); 
      mNumberOfCommentsAtPoll = (int) dataSnapshot.child(COMMENTS_LABEL).getChildrenCount(); 
      for (int i = 0; i < mNumberOfCommentsAtPoll; i++) { 
       String commentID = (String) dataSnapshot.child(COMMENTS_LABEL).child(mCommentIDArrayList.get(i)).child("COMMENT").getValue(); 
       Log.v("COMMENT_ID", "The comment ID is " + commentID); 
       String userID = (String) dataSnapshot.child(COMMENTS_LABEL).child(mCommentIDArrayList.get(i)).child("USER_ID").getValue(); 
       Log.v("USER_ID", "The user ID is " + userID); 
       mCommentArrayList.add(0 , new Comments(mUserAvatar, userID, commentID)); 
       mCommentAdapter.notifyDataSetChanged(); 
      } 

     } 

     @Override 
     public void onCancelled(FirebaseError firebaseError) { 

     } 
    }); 

は私RecyclerViewアダプタです:あなたgetItemCountで

public class MyAdapter extends RecyclerView.Adapter<MyAdapter.ViewHolder> { 

    // Provide a reference to the views for each data item 
    // Complex data items may need more than one view per item, and 
    // you provide access to all the views for a data item in a view holder 
    public class ViewHolder extends RecyclerView.ViewHolder { 
     // each data item is just a string in this case 
     protected ImageView userAvatar; 
     protected TextView userID; 
     protected TextView userComment; 

     public ViewHolder(View v) { 
      super(v); 
      userAvatar = (ImageView) findViewById(R.id.profile_image_avatar); 
      userID = (TextView) findViewById(R.id.user_ID); 
      userComment = (TextView) findViewById(R.id.user_comment); 
     } 
    } 

    // Provide a suitable constructor (depends on the kind of dataset) 
    public MyAdapter(ArrayList<Comments> myDataset) { 
     mCommentArrayList = myDataset; 
    } 

    // Create new views (invoked by the layout manager) 
    @Override 
    public MyAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, 
                int viewType) { 
     // create a new view 
     View v = LayoutInflater.from(parent.getContext()) 
       .inflate(R.layout.individual_comment, parent, false); 
     // set the view's size, margins, paddings and layout parameters 

     return new ViewHolder(v); 
    } 

    // Replace the contents of a view (invoked by the layout manager) 

    @Override 
    public void onBindViewHolder(ViewHolder holder, int position) { 
     holder.userComment.setText(mCommentArrayList.get(position).getUserComment()); 
     holder.userID.setText(mCommentArrayList.get(position).getUserID()); 
    } 

    // Return the size of your dataset (invoked by the layout manager) 
    @Override 
    public int getItemCount() { 
     return mNumberOfCommentsAtPoll; 
    } 
} 
+0

あなたの 'getItemCount()'に 'mNumberOfCommentsAtPoll'を返します。しかし、私は 'MyAdapter'に' mNumberOfCommentsAtPoll'をどこに宣言しているのか分かりません。 –

+0

私はそれが問題ではないことを知っていますが、指摘に感謝 – tccpg288

答えて

3

() RecycleViewAdapterの場合、リストのデータソースサイズを返す必要があります。

@Override 
public int getItemCount() { 
    return mCommentArrayList.size(); 
} 
+0

私は、私のgetItemCount()メソッドのsizsが不正確だとは思わないので、私のViewHolderが間違っているとも思う – tccpg288

0

主な問題は、findViewByID()メソッドを扱うことでした。

 public ViewHolder(View v) { 
     super(v); 
     userAvatar = (ImageView) findViewById(R.id.profile_image_avatar); 
     userID = (TextView) findViewById(R.id.user_ID); 
     userComment = (TextView) findViewById(R.id.user_comment); 
    } 

私は、問題を解決し、私が経験していたすべてのデータの人口問題を解消するためにv.findViewByIDを()を使用。

関連する問題