Java RecyclerView适配器赢得';不要给正确的布局充气

Java RecyclerView适配器赢得';不要给正确的布局充气,java,android,android-recyclerview,Java,Android,Android Recyclerview,当arraylistPinnedSongs为空时,我试图让我的应用程序显示特定的布局 我创建了不同的视窗夹,并尝试根据PinnedSongs.size对其进行充气。也就是说,如果它是0,那么onCreateViewHolder应该为特殊布局充气。如果不一样,再充气一个 public class RecyclerAdapterHome extends RecyclerView.Adapter<RecyclerView.ViewHolder> { public class Vi

当arraylist
PinnedSongs
为空时,我试图让我的应用程序显示特定的布局

我创建了不同的视窗夹,并尝试根据
PinnedSongs.size
对其进行充气。也就是说,如果它是0,那么
onCreateViewHolder
应该为特殊布局充气。如果不一样,再充气一个

public class RecyclerAdapterHome extends RecyclerView.Adapter<RecyclerView.ViewHolder> {

    public class Viewholder extends RecyclerView.ViewHolder implements View.OnClickListener{

        CardView home_cardView;
        TextView home_textView;
        TextView home_textView_2;
        Button home_button;
        Button home_button_2;
        RelativeLayout parentlayout;
        OnNoteListener_2 onNoteListener2;
        public Viewholder(@NonNull View itemView, OnNoteListener_2 onNoteListener_2) {
            super(itemView);
            home_cardView = itemView.findViewById(R.id.cardview_2);
            home_textView = itemView.findViewById(R.id.cardview_2_textview);
            home_textView_2 = itemView.findViewById(R.id.cardview_2_textview_sub);
            home_button = itemView.findViewById(R.id.play_button);
            home_button_2 = itemView.findViewById(R.id.push_button);
            parentlayout = itemView.findViewById(R.id.home_parentlayout);
            home_button.setOnClickListener(this);
            this.onNoteListener2 = onNoteListener_2;
        }

        @Override
        public void onClick(View v) {
            onNoteListener2.onClick(getAdapterPosition());
        }
    }
    public class Viewholder_2 extends RecyclerView.ViewHolder {
        TextView textView_3;
        ImageView imageView;
        RelativeLayout parentlayout;
        public Viewholder_2(@NonNull View itemView) {
            super(itemView);
            textView_3 = itemView.findViewById(R.id.text_warning);
            imageView = itemView.findViewById(R.id.icon);
            parentlayout = itemView.findViewById(R.id.home_parentlayout);
        }
    }

    public RecyclerAdapterHome(OnNoteListener_2 mOnNoteListener2, ArrayList<String> pinnedSongs, ArrayList<String> pinnedSongsArtists, Context mContext) {
        this.mOnNoteListener2 = mOnNoteListener2;
        this.PinnedSongs = pinnedSongs;
        this.PinnedSongsArtists = pinnedSongsArtists;
        this.mContext = mContext;
    }

    private ArrayList<String> PinnedSongs = new ArrayList<>();
    private ArrayList<String> PinnedSongsArtists = new ArrayList<>();
    private Context mContext;
    private OnNoteListener_2 mOnNoteListener2;

    @NonNull
    @Override
    public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        View v = null;
        if (PinnedSongs.size()==0){
            v = LayoutInflater.from(parent.getContext()).inflate(R.layout.nothing, parent, false);
            return new Viewholder_2(v);
        }else{
            v = LayoutInflater.from(parent.getContext()).inflate(R.layout.homeviewholder,
                    parent, false);
            return new Viewholder(v,mOnNoteListener2 );
        }
    }

    @Override
    public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int position) {
       if (PinnedSongs.size()==0){
           Viewholder_2 viewholder_2 = (Viewholder_2) holder;
        }else{
           Viewholder viewholder = (Viewholder) holder;
           viewholder.home_textView.setText(PinnedSongs.get(position));
           viewholder.home_textView_2.setText(PinnedSongsArtists.get(position));
       }
    }

    @Override
    public int getItemCount() {
        return PinnedSongs.size();
    }

    public interface OnNoteListener_2 {
        void onClick(int position);
    }
}
公共类RecyclerAdapterHome扩展了RecyclerView.Adapter{ 公共类Viewholder扩展了RecyclerView.Viewholder实现了View.OnClickListener{ 卡德维尤家庭影院; TextView主页\u TextView; TextView主页_TextView_2; 按钮主页按钮; 按钮主页按钮2; 相对亲子布局; OnNoteListener_2 OnNoteListener 2; public Viewholder(@NonNull View itemView,OnNoteListener_2 OnNoteListener_2){ 超级(项目视图); home\u cardwiew=itemView.findviewbyd(R.id.cardwiew\u 2); home\u textView=itemView.findviewbyd(R.id.cardwiew\u 2\u textView); home\u textView\u 2=itemView.findviewbyd(R.id.cardwiew\u 2\u textView\u sub); 主页按钮=itemView.findViewById(R.id.play按钮); home_button_2=itemView.findViewById(R.id.push_button); parentlayout=itemView.findviewbyd(R.id.home\u parentlayout); home_按钮。setOnClickListener(此); this.onNoteListener2=onNoteListener_2; } @凌驾 公共void onClick(视图v){ onNoteListener2.onClick(getAdapterPosition()); } } 公共类Viewholder_2扩展了RecyclerView.Viewholder{ TextView TextView_3; 图像视图图像视图; 相对亲子布局; 公共视图持有者_2(@NonNull View itemView){ 超级(项目视图); textView_3=itemView.findViewById(R.id.text_警告); imageView=itemView.findViewById(R.id.icon); parentlayout=itemView.findviewbyd(R.id.home\u parentlayout); } } 公共回收站AdapterHome(OnNoteListener_2 mOnNoteListener2、ArrayList pinnedSongs、ArrayList pinnedSongsArtists、Context McContext){ this.mOnNoteListener2=mOnNoteListener2; this.PinnedSongs=PinnedSongs; this.PinnedSongsArtists=PinnedSongsArtists; this.mContext=mContext; } private ArrayList PinnedSongs=新ArrayList(); private ArrayList PinnedSongsArtists=new ArrayList(); 私有上下文; 私有OnNoteListener_2 MonNoteListener 2; @非空 @凌驾 public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup父级,int-viewType){ 视图v=null; if(PinnedSongs.size()==0){ v=LayoutInflater.from(parent.getContext()).flate(R.layout.nothing,parent,false); 返回新的视图持有者_2(v); }否则{ v=LayoutInflater.from(parent.getContext()).flate(R.layout.homeviewholder, 父母,假); 返回新的Viewholder(v,mOnNoteListener2); } } @凌驾 public void onBindViewHolder(@NonNull RecyclerView.ViewHolder,int位置){ if(PinnedSongs.size()==0){ 视窗座_2视窗座_2=(视窗座_2)视窗座; }否则{ Viewholder Viewholder=(Viewholder)holder; viewholder.home_textView.setText(pinnedshongs.get(position)); viewholder.home\u textView\u 2.setText(PinnedSongsArtists.get(position)); } } @凌驾 public int getItemCount(){ 返回PinnedSongs.size(); } 公共接口OnNoteListener_2{ void onClick(内部位置); } } 到目前为止,当PinnedSongs列表为零时,recyclerview没有显示任何内容。但当它高于零时,它会显示一些东西。你知道我该怎么修吗


(如果与此相关,我正在使用androidx库)。

它不起作用,因为
getItemCount
方法返回
0
,而
RecyclerView
从不尝试实例化视图

这意味着当大小为0时,不会调用
onBindViewHolder

你有不同的选择。其中之一是:

    @Override
    public int getItemCount() {
        return PinnedSongs.size() > 0 ? PinnedSongs.size() : 1;
    }

    @Override
    public int getItemViewType(int position) {
        if (PinnedSongs.size() == 0) {
            return EMPTY_VIEW;
        }
        return super.getItemViewType(position);
    }

    @Override
    public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View v;

        if (viewType == EMPTY_VIEW) {
            v = LayoutInflater.from(parent.getContext()).inflate(R.layout.nothing, parent, false);
            EmptyViewHolder emptyViewHolder = new EmptyViewHolder(v);
            return emptyViewHolder;
        }
        //normal case
        v = LayoutInflater.from(parent.getContext()).inflate(R.layout.homeviewholder, parent, false);
        ViewHolder viewholder = new ViewHolder(v);
        return viewholder;
    }

    public class EmptyViewHolder extends RecyclerView.ViewHolder {
        public EmptyViewHolder(View itemView) {
            super(itemView);
        }
    }

    private static final int EMPTY_VIEW = 1000;

它工作得很好。我明白我做错了什么,谢谢!Hi @ Ricochet如果这个或任何答案已经解决了你的问题,请考虑点击复选标记。这向更广泛的社区表明,你已经找到了一个解决方案,并给回答者和你自己带来了一些声誉。没有义务这样做。