2016-02-05 51 views
0

我有非常流行的問題 - 爲什麼數據沒有顯示在RecycleView中。RecycleView不顯示數據

這是我的適配器:

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

private static final String TAG = "CommentsAdapter"; 
public ImageView mThumbView; 
private List<PostComment> postCommentList; 

public CommentsAdapter(List<PostComment> postCommentList) { 
    this.postCommentList = postCommentList; 
} 
@Override 
public CommentsAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 
    View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.post_comment_item, parent, false); 
    return new ViewHolder(v); 
} 

@Override 
public void onBindViewHolder(CommentsAdapter.ViewHolder holder, int position) { 
    PostComment record = postCommentList.get(position); 
    holder.mAuthorTextView.setText(record.getUser().getFull_name()); 
    holder.mDateTextView.setText(record.getCreated_at()); 
    holder.mTextTextView.setText(record.getText()); 
} 

@Override 
public int getItemCount() { 
    Log.i(TAG + " comments size", Integer.toString(postCommentList.size())); 
    return postCommentList.size(); 
} 

public void addItems(List<PostComment> postCommentList) { 
    this.postCommentList.addAll(postCommentList); 
} 

public class ViewHolder extends RecyclerView.ViewHolder { 
    // each data item is just a string in this case 
    public TextView mAuthorTextView; 
    public TextView mDateTextView; 
    public TextView mTextTextView; 
    public ViewHolder(View v) { 
     super(v); 
     mAuthorTextView = (TextView) itemView.findViewById(R.id.comment_author); 
     mDateTextView = (TextView) itemView.findViewById(R.id.comment_date); 
     mTextTextView = (TextView) itemView.findViewById(R.id.comment_text); 
    } 
} 

}

這是我的觀點:

<android.support.v7.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:card_view="http://schemas.android.com/apk/res-auto" 
android:id="@+id/container" 
....> 

<RelativeLayout 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:background="@android:color/white" 
    android:paddingBottom="16dp" 
    android:paddingLeft="16dp" 
    android:paddingRight="16dp" 
    android:paddingTop="16dp"> 
    <ImageView 
     android:id="@+id/comment_image" 
     android:layout_width="50dp" 
     android:layout_height="50dp" 
     android:scaleType="centerInside" 
     android:src="@drawable/cat"/> 

    <RelativeLayout 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:id="@+id/middleLayout" 
     android:layout_toRightOf="@+id/comment_image" 
     android:layout_marginTop="8dp"> 


     <TextView 
      android:id="@+id/comment_author" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_centerVertical="true" 
      android:singleLine="true" 
      android:text="Dark Plastic" 
      android:textColor="?attr/colorPrimary" 
      android:textSize="14dp" /> 



     <TextView 
      android:id="@+id/comment_date" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_centerVertical="true" 
      android:layout_marginLeft="8dp" 
      android:layout_toRightOf="@+id/comment_author" 
      android:text="21 minutes" 
      android:textSize="14dp" /> 


    </RelativeLayout> 

    <TextView 
     android:id="@+id/comment_text" 
     android:layout_width="wrap_content" 
     android:layout_toRightOf="@+id/comment_image" 
     android:layout_height="wrap_content" 
     android:maxLines="3" 
     android:layout_marginTop="8dp" 
     android:layout_below="@id/middleLayout" 
     android:text="sd" 
     android:textColor="@android:color/black" 
     android:textSize="16dp" /> 

</RelativeLayout> 

<View 
    android:id="@+id/divider" 
    android:layout_width="match_parent" 
    android:layout_height="1dp" 
    android:layout_gravity="bottom" 
    android:paddingLeft="16dp" 
    android:paddingRight="16dp"></View> 

那就是如何我設置適配器:

mLayoutManager = new LinearLayoutManager(this); 
    mLayoutManager.setOrientation(LinearLayoutManager.VERTICAL); 
    post_details_comments_list.setLayoutManager(mLayoutManager); 
    mCommentListAdapter = new CommentsAdapter(new ArrayList<PostComment>()); 
    post_details_comments_list.setAdapter(mCommentListAdapter); 

設置適配器後,我getItemCount返回項目的數量 - 因此它不爲空。

RecycleView佈局:

<?xml version="1.0" encoding="utf-8"?> 

<LinearLayout 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical"> 

<com.google.android.gms.maps.MapView 
    android:id="@+id/post_details_mapview" 
    android:layout_width="wrap_content" 
    android:layout_height="200dp" /> 

<RelativeLayout 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content"> 
<TextView 
    android:id="@+id/post_details_comments_count" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    style="@style/TextLabelStyle"/> 

</RelativeLayout> 

<android.support.v7.widget.RecyclerView 
    android:id="@+id/post_details_comments_list" 
    android:layout_width="match_parent" 
    android:scrollbars="vertical" 
    android:layout_height="wrap_content"> 
</android.support.v7.widget.RecyclerView> 
    <EditText 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:id="@+id/edit_comment" 
    android:hint="@string/hint_type_comment"/> 

</LinearLayout> 

我提出請求到服務器,在這裏是回調,在那裏我得到的結果,並設置適配器:

@Override 
public void onAllPostCommentsCallback(AllComments allComments) { 
    Log.i(TAG + " I've the comments", allComments.getPostCommentList().toString()); 

    mCommentListAdapter.addItems(allComments.getPostCommentList()); 
    post_details_comments_list.setAdapter(mCommentListAdapter); 
    mCommentListAdapter.notifyDataSetChanged(); 

} 

但列表不顯示。 可能是什麼原因?

+0

可以請你RecycleView佈局XML? –

+0

是的,alredy加入 –

+1

確實,您不需要每次從服務器獲得響應時都設置適配器。您應該添加項目並通知。你可以刪除'post_details_comments_list.setAdapter(mCommentListAdapter)'。 – thetonrifles

回答

0

null就地父的View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.post_comment_item, parent, false);

+0

這是什麼原因? –