繁体   English   中英

如果ArrayList为空,为什么不显示RecyclerView没有标题?

[英]Why shows the RecyclerView no header if the ArrayList is empty?

我的RecyclerView显示CardViews和标题。 Cardviewsjson获取值,而Header从之前的活动中给定参数获取值。

我的问题是,如果CardView json不为空,则Reyclerview仅显示Header,但是如果json没有向CardView发送空值,则显示Header。

RecyclerViewAdapter

        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的大小(如果该getDataAdapter为空仅用于显示Header),但它不起作用。

也有

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


                }
            }

我试图更改final GetDataAdapter current = getItem(position);position final GetDataAdapter current = getItem(position); 我认为有必要做类似position - 1或类似的操作: size + 1 ,因为Array0开始计数, size1开始计数。

也许您可以给我提示或解决我的问题。

假设您的列表getDataAdapter为空。 然后, getDataAdapter.size() == 0getItemCount()也返回0 由于您始终希望显示标题,因此getItemCount()应该始终返回至少1 我将其重写为:

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

进行此更改后,RecyclerView列表中始终存在第零个项目。 调用getItemViewType() ,它将为该第零个项目正确返回TYPE_HEADER ,因此第零个项目的RecyclerView.ViewHolder将为HeaderViewHolder (我知道您曾说过一些有关在getDataAdapter为空时更改其大小的getDataAdapter ,但这似乎是在此处实现目标的一种getDataAdapter方式。无需更改数据模型即可容纳您的视图。)

关于onBindViewHolder() :您不需要该嵌套的if-else语句。 由于标题始终位于RecyclerView列表的顶部,因此当RecyclerView绑定到第一个“常规”列表项时, position参数将为1 但是第一个普通项目对应于getDataAdapter的第零个项目,因此减去1

@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
    }
}

错误是,如果响应为空,我忘记设置适配器。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM