Java 将数据从片段回收视图A传输到片段回收视图B时出错
我正在写一个包含2个不同片段的应用程序列表,每个片段都有一个recyclerview, 选项卡1包含recyclerview中的项目列表当您按下项目按钮时,选项卡2将显示在选项卡2的recyclerview中按下的项目 阶级 适配器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&
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);
}