Java RecyclerView适配器赢得';不要给正确的布局充气
当arraylistJava 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
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如果这个或任何答案已经解决了你的问题,请考虑点击复选标记。这向更广泛的社区表明,你已经找到了一个解决方案,并给回答者和你自己带来了一些声誉。没有义务这样做。