簡體   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