代码之家  ›  专栏  ›  技术社区  ›  Jakob

如果arraylist为空,为什么显示recyclerview no头?

  •  1
  • Jakob  · 技术社区  · 7 年前

    我的 RecyclerView 显示器 CardViews 还有一个标题。 这个 Cardviews 从中获取值 json 头部从之前活动中给定的参数中获取值。

    我的问题是 Reyclerview 仅在以下情况下显示标题: 杰森 对于 CardView 不是空的,但如果 杰森 不向发送空值 卡地维 显示标题。

    回收视图适配器 :

            public class RecyclerViewAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
    
                Context context;
    
                private Activity activity;
    
                List<GetDataAdapter> getDataAdapter;
                List<ExerciseAdapter> exerciseAdapter;
                private static final int TYPE_HEADER = 0;
    
                private static final int TYPE_ITEM = 1;
                public RecyclerViewAdapter(Context context, List<GetDataAdapter> getDataAdapter, List<ExerciseAdapter> exerciseAdapter){
    
                    super();
    
                    this.exerciseAdapter = exerciseAdapter;
                    this.getDataAdapter = getDataAdapter;
                    this.context = context;
                }
    
                private GetDataAdapter getItem(int position)
                {
                    return getDataAdapter.get(position);
    
                }
    
    
                @Override
                public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
                    if (viewType == TYPE_ITEM) {
                         View itemView = LayoutInflater.from(parent.getContext()).inflate(R.layout.item, parent, false);
                         return new ViewHolder(itemView);
                    }
                    if (viewType == TYPE_HEADER) {
                        //Inflating header view
                        View itemView = LayoutInflater.from(parent.getContext()).inflate(R.layout.header, parent, false);
                        return new HeaderViewHolder(itemView);
                    }
                    return null;
                }
    
    
    
                class ViewHolder extends RecyclerView.ViewHolder{
    
                    public TextView edit;
                    public TextView NameTextView;
                    public TextView PhoneNumberTextView;
                    public TextView SubjectTextView;
                    public NetworkImageView imageView1;
                    public NetworkImageView imageView2;
                    public NetworkImageView imageView3;
                    public NetworkImageView imageView4;
                    public NetworkImageView imageView5;
                    public TextView ratebutton;
    
    
                    public ViewHolder(View itemView) {
    
                        super(itemView);
                        edit = (TextView)itemView.findViewById(R.id.edit);
                        NameTextView = (TextView) itemView.findViewById(R.id.textView4) ;
                        PhoneNumberTextView = (TextView) itemView.findViewById(R.id.textView6) ;
                        SubjectTextView = (TextView) itemView.findViewById(R.id.textView8) ;
                        imageView1 = (NetworkImageView)itemView.findViewById(R.id.imageView1t);
                        imageView2 = (NetworkImageView)itemView.findViewById(R.id.imageView2t);
                        imageView3 = (NetworkImageView)itemView.findViewById(R.id.imageView3t);
                        imageView4 = (NetworkImageView)itemView.findViewById(R.id.imageView4t);
                        imageView5 = (NetworkImageView)itemView.findViewById(R.id.imageView5t);
                        ratebutton = (TextView)itemView.findViewById(R.id.ratebutton);
    
    
    
                    }
                }
    
    
    
                @Override
                public void onBindViewHolder(final RecyclerView.ViewHolder holder, int position) {
                    if (holder instanceof ViewHolder) {
    
                        if (position != 0) {
                          final GetDataAdapter current = getItem(position - 1);
    
    
                            final ViewHolder holder1 = (ViewHolder) holder;
                            final ImageLoader imageLoader = ImageAdapter.getInstance(context).getImageLoader();
                            final ImageLoader imageLoader2 = ImageAdapter.getInstance(context).getImageLoader();
                            final ImageLoader imageLoader3 = ImageAdapter.getInstance(context).getImageLoader();
                            final ImageLoader imageLoader4 = ImageAdapter.getInstance(context).getImageLoader();
                            final ImageLoader imageLoader5 = ImageAdapter.getInstance(context).getImageLoader();
    
                            imageLoader.get(current.getImageUrl(),
                                    ImageLoader.getImageListener(
                                            holder1.imageView1,
                                            R.mipmap.ic_launcher_image,
                                            android.R.drawable.ic_dialog_alert
                                    )
                            );
                            imageLoader2.get(current.getImageUrl2(),
                                    ImageLoader.getImageListener(
                                            holder1.imageView2,
                                            R.mipmap.ic_launcher_image,
                                            android.R.drawable.ic_dialog_alert
                                    )
                            );
                            imageLoader3.get(current.getImageUrl3(),
                                    ImageLoader.getImageListener(
                                            holder1.imageView3,
                                            R.mipmap.ic_launcher_image,
                                            android.R.drawable.ic_dialog_alert
                                    )
                            );
                            imageLoader4.get(current.getImageUrl4(),
                                    ImageLoader.getImageListener(
                                            holder1.imageView4,
                                            R.mipmap.ic_launcher_image,
                                            android.R.drawable.ic_dialog_alert
                                    )
                            );
                            imageLoader5.get(current.getImageUrl5(),
                                    ImageLoader.getImageListener(
                                            holder1.imageView5,
                                            R.mipmap.ic_launcher_image,
                                            android.R.drawable.ic_dialog_alert
                                    )
                            );
    
    
                            holder1.imageView1.setImageUrl(current.getImageUrl(), imageLoader);
                            holder1.imageView2.setImageUrl(current.getImageUrl2(), imageLoader2);
                            holder1.imageView3.setImageUrl(current.getImageUrl3(), imageLoader3);
                            holder1.imageView4.setImageUrl(current.getImageUrl4(), imageLoader4);
                            holder1.imageView5.setImageUrl(current.getImageUrl5(), imageLoader5);
                            holder1.NameTextView.setText(current.getName());
                            holder1.PhoneNumberTextView.setText(current.getPhone_number());
                            holder1.SubjectTextView.setText(current.getSubject2());
    
    
    
                        } else{
                            final GetDataAdapter current = getItem(position);
                            final ViewHolder holder1 = (ViewHolder) holder;
                            final ImageLoader imageLoader = ImageAdapter.getInstance(context).getImageLoader();
                            final ImageLoader imageLoader2 = ImageAdapter.getInstance(context).getImageLoader();
                            final ImageLoader imageLoader3 = ImageAdapter.getInstance(context).getImageLoader();
                            final ImageLoader imageLoader4 = ImageAdapter.getInstance(context).getImageLoader();
                            final ImageLoader imageLoader5 = ImageAdapter.getInstance(context).getImageLoader();
    
                            imageLoader.get(current.getImageUrl(),
                                    ImageLoader.getImageListener(
                                            holder1.imageView1,
                                            R.mipmap.ic_launcher_image,
                                            android.R.drawable.ic_dialog_alert
                                    )
                            );
                            imageLoader2.get(current.getImageUrl2(),
                                    ImageLoader.getImageListener(
                                            holder1.imageView2,
                                            R.mipmap.ic_launcher_image,
                                            android.R.drawable.ic_dialog_alert
                                    )
                            );
                            imageLoader3.get(current.getImageUrl3(),
                                    ImageLoader.getImageListener(
                                            holder1.imageView3,
                                            R.mipmap.ic_launcher_image,
                                            android.R.drawable.ic_dialog_alert
                                    )
                            );
                            imageLoader4.get(current.getImageUrl4(),
                                    ImageLoader.getImageListener(
                                            holder1.imageView4,
                                            R.mipmap.ic_launcher_image,
                                            android.R.drawable.ic_dialog_alert
                                    )
                            );
                            imageLoader5.get(current.getImageUrl5(),
                                    ImageLoader.getImageListener(
                                            holder1.imageView5,
                                            R.mipmap.ic_launcher_image,
                                            android.R.drawable.ic_dialog_alert
                                    )
                            );
    
    
                            holder1.imageView1.setImageUrl(current.getImageUrl(), imageLoader);
                            holder1.imageView2.setImageUrl(current.getImageUrl2(), imageLoader2);
                            holder1.imageView3.setImageUrl(current.getImageUrl3(), imageLoader3);
                            holder1.imageView4.setImageUrl(current.getImageUrl4(), imageLoader4);
                            holder1.imageView5.setImageUrl(current.getImageUrl5(), imageLoader5);
                            holder1.NameTextView.setText(current.getName());
                            holder1.PhoneNumberTextView.setText(current.getPhone_number());
                            holder1.SubjectTextView.setText(current.getSubject2());
    
    
                        }
                    }
                    if (holder instanceof HeaderViewHolder) {
                        final GetDataAdapter current = getItem(position);
                        final HeaderViewHolder holder1 = (HeaderViewHolder) holder;
    
                        //set text of header textviews;
    
    
    
                    }
    
                }
    
    
    
                @Override
                public int getItemViewType(int position) {
                    if (position == 0) {
                        return TYPE_HEADER;
                    }
                        return TYPE_ITEM;
    
            }
    
    
                @Override
                public int getItemCount() {
                   if (!getDataAdapter.isEmpty()) {
                       return getDataAdapter.size() + 1;
                   } else
    
                       return getDataAdapter.size();
    
                }
                private class HeaderViewHolder extends RecyclerView.ViewHolder {
                    TextView //some Textviews for Header;
                    ImageView exerciseimage;
    
                    public HeaderViewHolder(View view) {
                        super(view);
    
    
                      // declaring textviews;
    
    
    
                    }
                }
    
    
    
    
            }
    

    @Override
            public int getItemCount() {
               if (!getDataAdapter.isEmpty()) {
                   return getDataAdapter.size() + 1;
               } else
    
                   return getDataAdapter.size();
    
            }
    

    我试图改变 getDataAdapter 如果它是空的,只显示标题,但不起作用。

    也与

    else{
                        final GetDataAdapter current = getItem(position);
                        final ViewHolder holder1 = (ViewHolder) holder;
                        final ImageLoader imageLoader = ImageAdapter.getInstance(context).getImageLoader();
                        final ImageLoader imageLoader2 = ImageAdapter.getInstance(context).getImageLoader();
                        final ImageLoader imageLoader3 = ImageAdapter.getInstance(context).getImageLoader();
                        final ImageLoader imageLoader4 = ImageAdapter.getInstance(context).getImageLoader();
                        final ImageLoader imageLoader5 = ImageAdapter.getInstance(context).getImageLoader();
    
                        imageLoader.get(current.getImageUrl(),
                                ImageLoader.getImageListener(
                                        holder1.imageView1,
                                        R.mipmap.ic_launcher_image,
                                        android.R.drawable.ic_dialog_alert
                                )
                        );
                        imageLoader2.get(current.getImageUrl2(),
                                ImageLoader.getImageListener(
                                        holder1.imageView2,
                                        R.mipmap.ic_launcher_image,
                                        android.R.drawable.ic_dialog_alert
                                )
                        );
                        imageLoader3.get(current.getImageUrl3(),
                                ImageLoader.getImageListener(
                                        holder1.imageView3,
                                        R.mipmap.ic_launcher_image,
                                        android.R.drawable.ic_dialog_alert
                                )
                        );
                        imageLoader4.get(current.getImageUrl4(),
                                ImageLoader.getImageListener(
                                        holder1.imageView4,
                                        R.mipmap.ic_launcher_image,
                                        android.R.drawable.ic_dialog_alert
                                )
                        );
                        imageLoader5.get(current.getImageUrl5(),
                                ImageLoader.getImageListener(
                                        holder1.imageView5,
                                        R.mipmap.ic_launcher_image,
                                        android.R.drawable.ic_dialog_alert
                                )
                        );
    
    
                        holder1.imageView1.setImageUrl(current.getImageUrl(), imageLoader);
                        holder1.imageView2.setImageUrl(current.getImageUrl2(), imageLoader2);
                        holder1.imageView3.setImageUrl(current.getImageUrl3(), imageLoader3);
                        holder1.imageView4.setImageUrl(current.getImageUrl4(), imageLoader4);
                        holder1.imageView5.setImageUrl(current.getImageUrl5(), imageLoader5);
                        holder1.NameTextView.setText(current.getName());
                        holder1.PhoneNumberTextView.setText(current.getPhone_number());
                        holder1.SubjectTextView.setText(current.getSubject2());
    
    
                    }
                }
    

    我试图改变 position 在里面 final GetDataAdapter current = getItem(position); 我认为这样做是必要的 position - 1 或类似: size + 1 ,因为数组开始计数 0 尺寸为 1 .

    也许你可以给我一个提示或者解决我的问题。

    1 回复  |  直到 7 年前
        1
  •  1
  •   Jack Meister    7 年前

    假设你的名单, getDataAdapter ,为空。然后 getDataAdapter.size() == 0 getItemCount() 也回报 0 . 因为你总是想让标题显示出来, 获取项计数() 至少应该总是返回 1 . 我会简单地重写它:

    @Override
    public int getItemCount() {
        return getDataAdapter.size() + 1;
    }
    

    有了这个更改,RecyclerView列表中总是有第零个项目。什么时候? getItemViewType() 被调用,它将正确返回 TYPE_HEADER 对于第零项,所以 RecyclerView.ViewHolder 第0项中的将是 HeaderViewHolder . (我知道你说过要改变 获取数据适配器 当它是空的,但这似乎是一个迂回的方式来实现这里的目标。您的数据模型不需要更改以适应您的视图。)

    关于 onBindViewHolder() :您不需要嵌套的if-else语句。由于头始终位于RecyclerView列表的顶部,因此 position 参数将为 当RecyclerView绑定到第一个“Normal”列表项时。但第一个正常项对应于 获取数据适配器 ,所以减去 :

    @Override
    public void onBindViewHolder(final RecyclerView.ViewHolder holder, int position) {
        if (holder instanceof ViewHolder) {
            final ViewHolder viewHolder = (ViewHolder) holder;
            final GetDataAdapter current = getItem(position - 1);
            //bind to normal views
        } else if (holder instanceof HeaderViewHolder) {
            final HeaderViewHolder headerViewHolder = (HeaderViewHolder) holder;
            //set text of header textviews
        }
    }