RecyclerView 中的第 11 个项目后图像消失
Images disappear after 11th item in RecyclerView
我创建了一个包含 CardView 的 Firebase RecyclerView。在 CardView 内部有一个 ImageView 和一个 TextView。如果图片与其描述 (TextView) 一起上传,则 ImageView 和 TextView 都可见,否则只有 TextView 可见。问题是,当 RecyclerView 包含超过 11 个项目时,ImageViews 会自动消失,只有 TextViews 可见。不知道为什么会这样。
下面是代码:
public class MainView extends
AppCompatActivity {
private RecyclerView mPlacelist; protected void onCreate(Bundle SavedInstanceState) {
super.onCreate(SavedInstanceState); mPlacelist= (RecyclerView) findViewById(R.id.Place_list); mPlacelist.setHasFixedSize(true);
LinearLayoutManager mLayoutManager=new LinearLayoutManager(MainView.this); mLayoutManager.setReverseLayout(true); mLayoutManager.setStackFromEnd(true); mPlacelist.setLayoutManager(mLayoutManager); } public static class MainViewHolder extends RecyclerView.ViewHolder {
View mView;
public MainViewHolder(View itemView,int viewType) {
super(itemView);
mView = itemView;
}
public void setDescription(String description) {
TextView post_desc = (TextView) mView.findViewById(R.id.post_desc);
post_desc.setText(description);
}
public void setImage(final Context ctx, final String image) {
ImageView post_image = (ImageView) mView.findViewById(R.id.post_image);
//If image exist
if (image != null) {
Picasso.with(ctx).load(image).fit().centerInside().into(post_image);
} else if (image == null) {
//no image then imageview invisible
Picasso.with(ctx).cancelRequest(post_image);
post_image.setVisibility(View.INVISIBLE);
post_image.setVisibility(View.GONE);
}
}
}
final FirebaseRecyclerAdapter<MainBlogView, MainView.MainViewHolder> firebaseRecyclerAdapter = new FirebaseRecyclerAdapter<MainBlogView, MainView.MainViewHolder>(
MainBlogView.class, R.layout.recyclerplace, MainView.MainViewHolder.class, databaseReference ) {
@Override
protected void populateViewHolder(final MainView.MainViewHolder viewHolder, MainBlogView model, int position) {
viewHolder.setDescription(model.getDescription());
viewHolder.setImage(getApplicationContext(), model.getImage());
viewHolder.setTimestamp(model.getTimestamp());
} @Override
public int getItemViewType(int position) {
return super.getItemViewType(position);
}
};
firebaseRecyclerAdapter.notifyDataSetChanged();
mPlacelist.setAdapter(firebaseRecyclerAdapter);
} }
感谢任何帮助。谢谢
代替此代码:
if (image != null) {
Picasso.with(ctx).load(image).fit().centerInside().into(post_image);
}
使用这个:
if (image != null) {
post_image.setVisibility(View.VISIBLE);
Picasso.with(ctx).load(image).fit().centerInside().into(post_image);
}
你得到这个 "error" 因为你的第 12 行没有图像并且你的代码隐藏了它,并且 RecyclerView 重用这些行以提高性能。
我创建了一个包含 CardView 的 Firebase RecyclerView。在 CardView 内部有一个 ImageView 和一个 TextView。如果图片与其描述 (TextView) 一起上传,则 ImageView 和 TextView 都可见,否则只有 TextView 可见。问题是,当 RecyclerView 包含超过 11 个项目时,ImageViews 会自动消失,只有 TextViews 可见。不知道为什么会这样。 下面是代码:
public class MainView extends
AppCompatActivity {
private RecyclerView mPlacelist; protected void onCreate(Bundle SavedInstanceState) {
super.onCreate(SavedInstanceState); mPlacelist= (RecyclerView) findViewById(R.id.Place_list); mPlacelist.setHasFixedSize(true);
LinearLayoutManager mLayoutManager=new LinearLayoutManager(MainView.this); mLayoutManager.setReverseLayout(true); mLayoutManager.setStackFromEnd(true); mPlacelist.setLayoutManager(mLayoutManager); } public static class MainViewHolder extends RecyclerView.ViewHolder {
View mView;
public MainViewHolder(View itemView,int viewType) {
super(itemView);
mView = itemView;
}
public void setDescription(String description) {
TextView post_desc = (TextView) mView.findViewById(R.id.post_desc);
post_desc.setText(description);
}
public void setImage(final Context ctx, final String image) {
ImageView post_image = (ImageView) mView.findViewById(R.id.post_image);
//If image exist
if (image != null) {
Picasso.with(ctx).load(image).fit().centerInside().into(post_image);
} else if (image == null) {
//no image then imageview invisible
Picasso.with(ctx).cancelRequest(post_image);
post_image.setVisibility(View.INVISIBLE);
post_image.setVisibility(View.GONE);
}
}
}
final FirebaseRecyclerAdapter<MainBlogView, MainView.MainViewHolder> firebaseRecyclerAdapter = new FirebaseRecyclerAdapter<MainBlogView, MainView.MainViewHolder>(
MainBlogView.class, R.layout.recyclerplace, MainView.MainViewHolder.class, databaseReference ) {
@Override
protected void populateViewHolder(final MainView.MainViewHolder viewHolder, MainBlogView model, int position) {
viewHolder.setDescription(model.getDescription());
viewHolder.setImage(getApplicationContext(), model.getImage());
viewHolder.setTimestamp(model.getTimestamp());
} @Override
public int getItemViewType(int position) {
return super.getItemViewType(position);
}
};
firebaseRecyclerAdapter.notifyDataSetChanged();
mPlacelist.setAdapter(firebaseRecyclerAdapter);
} }
感谢任何帮助。谢谢
代替此代码:
if (image != null) {
Picasso.with(ctx).load(image).fit().centerInside().into(post_image);
}
使用这个:
if (image != null) {
post_image.setVisibility(View.VISIBLE);
Picasso.with(ctx).load(image).fit().centerInside().into(post_image);
}
你得到这个 "error" 因为你的第 12 行没有图像并且你的代码隐藏了它,并且 RecyclerView 重用这些行以提高性能。