Android 图像在RecyclerView中的第11项后消失

Android 图像在RecyclerView中的第11项后消失,android,firebase,firebase-realtime-database,android-recyclerview,firebaseui,Android,Firebase,Firebase Realtime Database,Android Recyclerview,Firebaseui,我创建了一个Firebase RecyclerView,其中包含一个CardView。在CardView内部有一个ImageView和一个TextView。如果上载图像及其说明(TextView),则ImageView和TextView都可见,否则只有TextView可见。问题是,当RecyclerView包含超过11项时,ImageView会自动消失,只有TextView可见。不知道为什么会这样。 代码如下: public class MainView extends AppComp

我创建了一个Firebase RecyclerView,其中包含一个CardView。在CardView内部有一个ImageView和一个TextView。如果上载图像及其说明(TextView),则ImageView和TextView都可见,否则只有TextView可见。问题是,当RecyclerView包含超过11项时,ImageView会自动消失,只有TextView可见。不知道为什么会这样。 代码如下:

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);



} }
public类主视图扩展
AppCompative活动{
私有RecyclerView mPlacelist;创建时受保护的void(Bundle SavedInstanceState){
super.onCreate(SavedInstanceState);mPlacelist=(RecyclerView)findViewById(R.id.Place\u list);mPlacelist.setHasFixedSize(true);
LinearLayoutManager mLayoutManager=新的LinearLayoutManager(MainView.this);mLayoutManager.setReverseLayout(true);mLayoutManager.setStackFromEnd(true);mPlacelist.setLayoutManager(mLayoutManager);}公共静态类MainViewHolder扩展了RecyclerView.ViewHolder{
视图视图;
公共主视图持有者(视图项视图、int视图类型){
超级(项目视图);
mView=项目视图;
}
公共void集合描述(字符串描述){
TextView post_desc=(TextView)mView.findViewById(R.id.post_desc);
post_desc.setText(说明);
}
公共void setImage(最终上下文ctx,最终字符串图像){
ImageView post_image=(ImageView)mView.findviewbyd(R.id.post_image);
//如果图像存在
如果(图像!=null){
毕加索.with(ctx).load(图像).fit().centerInside()装入(post_图像);
}else if(image==null){
//没有图像,则imageview不可见
毕加索.with(ctx).cancelRequest(post_图像);
post_image.setVisibility(视图不可见);
post_image.setVisibility(View.GONE);
}
}
}
最终FirebaseRecyclerAdapter FirebaseRecyclerAdapter=新的FirebaseRecyclerAdapter(
MainBlogView.class,R.layout.recyclerplace,MainView.MainViewHolder.class,数据库参考){
@凌驾
受保护的void populateViewHolder(最终MainView.MainViewHolder viewHolder、MainBlogView模型、int位置){
viewHolder.setDescription(model.getDescription());
setImage(getApplicationContext(),model.getImage());
setTimestamp(model.getTimestamp());
}@覆盖
public int getItemViewType(int位置){
返回super.getItemViewType(位置);
}
};
firebaseRecyclerAdapter.notifyDataSetChanged();
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);

    }
出现此“错误”是因为您的第12行没有图像,代码将其隐藏,而RecyclerView会重用这些行以提高性能。

而不是此代码:

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);

    }

您出现此“错误”是因为您的第12行没有图像,而您的代码将其隐藏,而RecyclerView会重用这些行以提高性能。

您是否尝试注释这行代码
mPlacelist.setHasFixedSize(true)?是的,我有。。但这样做会完全删除imageview,而不考虑其位置@Alex Mamow删除或改编以下行时会发生什么
Picasso.with(ctx).cancelRequest(post_image);post_image.setVisibility(视图不可见);post_image.setVisibility(View.GONE)?我的猜测是,第12个图像实际上是空的,然后您在该块中的代码使所有未来的图像视图都不可见?@YodaScholtz如果我删除这些行,那么我将为imageview获得一个空白空间,因为其中没有图像。@YodaScholtz如果是这种情况,如何处理此wierd情况?您是否尝试对这行代码进行注释
mPlacelist.setHasFixedSize(true)?是的,我有。。但这样做会完全删除imageview,而不考虑其位置@Alex Mamow删除或改编以下行时会发生什么
Picasso.with(ctx).cancelRequest(post_image);post_image.setVisibility(视图不可见);post_image.setVisibility(View.GONE)?我的猜测是,第12幅图像实际上是空的,然后您在该块中的代码使所有未来的图像视图都不可见?@YodaScholtz如果我删除这些行,那么我将为imageview获得一个空白空间,因为其中没有图像。@YodaScholtz如果是这种情况,如何处理这种wierd情况?