Java 将数据从片段回收视图A传输到片段回收视图B时出错

Java 将数据从片段回收视图A传输到片段回收视图B时出错,java,android,android-fragments,android-recyclerview,Java,Android,Android Fragments,Android Recyclerview,我正在写一个包含2个不同片段的应用程序列表,每个片段都有一个recyclerview, 选项卡1包含recyclerview中的项目列表当您按下项目按钮时,选项卡2将显示在选项卡2的recyclerview中按下的项目 阶级 适配器 public class SongAdapter extends RecyclerView.Adapter<SongAdapter.ViewHolder> { private Context mContext; private List<Song&

我正在写一个包含2个不同片段的应用程序列表,每个片段都有一个recyclerview, 选项卡1包含recyclerview中的项目列表当您按下项目按钮时,选项卡2将显示在选项卡2的recyclerview中按下的项目

阶级

适配器

public class SongAdapter extends RecyclerView.Adapter<SongAdapter.ViewHolder> {
private Context mContext;
private List<Song> mSongList;
OnFavClick mFavclick;
public SongAdapter(OnFavClick callback) {
    this.mFavclick = callback;
}
public SongAdapter(List<Song> songList,Context context, OnFavClick favClick) {
    mSongList = songList;
    mContext = context;
    mFavclick = favClick;
@NonNull
@Override
public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
    if (mContext == null) {
        mContext = parent.getContext();
    }
    View view = LayoutInflater.from(mContext).inflate(R.layout.layout_song_item, parent, false);
    return new ViewHolder(view);
}
@Override
public void onBindViewHolder(@NonNull final SongAdapter.ViewHolder holder,final int position) {
    final Song song = mSongList.get(position);
    holder.txtId.setText(song.getmID());
    holder.txtSongTitle.setText(song.getmSongTittle());
    holder.txtSinger.setText(song.getmSongSinger());
    holder.imageButtonFav.setImageResource(song.ismSongFavorite() ? R.drawable.favorited : R.drawable.favorite);
    holder.imageButtonFav.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            if(holder.imageButtonFav.getTag().equals(false)){
                holder.imageButtonFav.setImageResource(R.drawable.favorited);
                holder.imageButtonFav.setTag(true);
                mFavclick.favclick(song.getmID(),song.getmSongTittle(),song.getmSongSinger(),song.ismSongFavorite());
            } else {
                holder.imageButtonFav.setImageResource(R.drawable.favorite);
                holder.imageButtonFav.setTag(false);
            }
        }
    });
}
@Override
public int getItemCount() {
    return mSongList.size();
}
public class ViewHolder extends RecyclerView.ViewHolder {
     TextView txtSongTitle,txtSinger,txtId;
     ImageButton imageButtonFav;
     public ViewHolder(View itemView) {
        super(itemView);
        txtId = itemView.findViewById(R.id.txtId);
        txtSongTitle = itemView.findViewById(R.id.txtSongTitle);
        txtSinger = itemView.findViewById(R.id.txtSinger);
        imageButtonFav = itemView.findViewById(R.id.imageButtonFav);
    }
}
}
当我按下项目的按钮时,出现了一个错误

Java.lang.NullPointerException:尝试调用接口方法 'void io.vacnex.songlib.OnFavClick.favclick(java.lang.String, 空对象上的“java.lang.String,java.lang.String,boolean)” 参考文献

如何处理这个错误?谢谢大家

public class SongAdapter extends RecyclerView.Adapter<SongAdapter.ViewHolder> {
private Context mContext;
private List<Song> mSongList;
OnFavClick mFavclick;
public SongAdapter(OnFavClick callback) {
    this.mFavclick = callback;
}
public SongAdapter(List<Song> songList,Context context, OnFavClick favClick) {
    mSongList = songList;
    mContext = context;
    mFavclick = favClick;
@NonNull
@Override
public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
    if (mContext == null) {
        mContext = parent.getContext();
    }
    View view = LayoutInflater.from(mContext).inflate(R.layout.layout_song_item, parent, false);
    return new ViewHolder(view);
}
@Override
public void onBindViewHolder(@NonNull final SongAdapter.ViewHolder holder,final int position) {
    final Song song = mSongList.get(position);
    holder.txtId.setText(song.getmID());
    holder.txtSongTitle.setText(song.getmSongTittle());
    holder.txtSinger.setText(song.getmSongSinger());
    holder.imageButtonFav.setImageResource(song.ismSongFavorite() ? R.drawable.favorited : R.drawable.favorite);
    holder.imageButtonFav.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            if(holder.imageButtonFav.getTag().equals(false)){
                holder.imageButtonFav.setImageResource(R.drawable.favorited);
                holder.imageButtonFav.setTag(true);
                mFavclick.favclick(song.getmID(),song.getmSongTittle(),song.getmSongSinger(),song.ismSongFavorite());
            } else {
                holder.imageButtonFav.setImageResource(R.drawable.favorite);
                holder.imageButtonFav.setTag(false);
            }
        }
    });
}
@Override
public int getItemCount() {
    return mSongList.size();
}
public class ViewHolder extends RecyclerView.ViewHolder {
     TextView txtSongTitle,txtSinger,txtId;
     ImageButton imageButtonFav;
     public ViewHolder(View itemView) {
        super(itemView);
        txtId = itemView.findViewById(R.id.txtId);
        txtSongTitle = itemView.findViewById(R.id.txtSongTitle);
        txtSinger = itemView.findViewById(R.id.txtSinger);
        imageButtonFav = itemView.findViewById(R.id.imageButtonFav);
    }
}
}
public class flayout_home extends Fragment {
    private RecyclerView rvSongs;
    SongAdapter adpter;
    private List<Song> songlist = new ArrayList<>();
    OnFavClick mOnClick;

    public Song[] songs = {
            new Song("01","Song 1","Singer A",false),
            new Song("02","Song 2","Singer B",false),
            new Song("03","Song 3","Singer C",false),
            new Song("04","Song 4","Singer D",false)
    };
    public flayout_home(){}
    public void setOnFavClick(OnFavClick onFavClick) {
        this.mOnClick = onFavClick;
    }
    public static flayout_home getInstance(){
        return new flayout_home();
    }
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.fragment_flayout_home, container, false);
        rvSongs = view.findViewById(R.id.rvSongs);
        GridLayoutManager layoutManager = new GridLayoutManager(this.getContext(), 1);//Parameter: context, number of columns
        adpter = new SongAdapter(songlist,getContext(),mOnClick);
        rvSongs.setAdapter(adpter);
        rvSongs.setLayoutManager(layoutManager);
        return view;
    }
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        initSongs();
    }
    private void initSongs() {
        for (int i = 0; i < songs.length; i++) {
            songlist.add(songs[i]);
        }
    }
}
public class flayout_fav extends Fragment implements OnFavClick{
    private Context mContext;
    private RecyclerView rvSongsFav;
    OnFavClick mOnClickFav = this;
    SongAdapter adpter;
    private  List<Song> songlist = new ArrayList<>();
    public flayout_fav() { }
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.fragment_flayout_fav, container, false);
        rvSongsFav = view.findViewById(R.id.rvSongsFav);
        return view;
    }
    @Override
    public void favclick(String id,String title,String singer, boolean favorite) {
        songlist.add(new Song(id,title,singer,favorite));
        GridLayoutManager layoutManager = new   GridLayoutManager(this.getContext(), 1);
        adpter = new SongAdapter(songlist);
        rvSongsFav.setAdapter(adpter);
        rvSongsFav.setLayoutManager(layoutManager);
    }
}
public interface OnFavClick {
        void favclick(String id,String songTitle, String singer, boolean isFav);
}