RecycleView不显示数据(RecycleView do not displaying the data)
我有一个非常受欢迎的问题 - 为什么数据没有显示在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
返回项目的数量 - 因此它不是null。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(); }
但是列表没有显示。 可能是什么原因?
I have very popular question - why the data not showing in the RecycleView.
That is my Adapter:
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); } }
}
That is my view:
<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>
That is how I set up the adapter:
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);
After I set up the adapter, I the
getItemCount
returns the quantity of the items - so that is not null.RecycleView layout:
<?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>
I make the request to the server and here is the callback, where I get the results and set up the adapter:
@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(); }
But the list is not displaying. What can be the reason?
原文:https://stackoverflow.com/questions/35218887