На самом деле есть два способа сделать это.
1.Удалите указанную ниже строку из RecyclerViewAdapter.
public RecyclerViewAdapter (TimeFragment timeFragment, List lstBook) {}
и вфрагмент кода, есть также небольшие изменения, пожалуйста, посмотрите код ниже, а также у меня не было отрисовки, поэтому я использовал по умолчанию.
public class TimeFragment extends Fragment {
List<Book> lstBook ;
public TimeFragment() {
// Required empty public constructor
}
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
lstBook = new ArrayList<>();
lstBook.add(new Book("The Vegitarian","Categorie Book","Description book",R.drawable.ic_launcher_background));
lstBook.add(new Book("The Wild Robot","Categorie Book","Description book",R.drawable.ic_launcher_background));
lstBook.add(new Book("Maria Semples","Categorie Book","Description book",R.drawable.ic_launcher_background));
lstBook.add(new Book("The Martian","Categorie Book","Description book",R.drawable.ic_launcher_background));
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
View view = inflater.inflate(R.layout.fragment_time, container, false);
RecyclerView myrv = (RecyclerView) view.findViewById(R.id.recyclerview_id);
RecyclerViewAdapter myAdapter = new RecyclerViewAdapter(getContext(),lstBook);
GridLayoutManager gridLayoutManager = new GridLayoutManager(getContext(), 2);
myrv.setLayoutManager(gridLayoutManager);
myrv.setAdapter(myAdapter);
return view;
}
}
И если вы не удалите выше-упомянутая линия все еще собирается работать.Просто измените код вашего TimeFragment.
То, что произошло, - когда у вас есть контекст в конструкторе адаптера, вы фактически использовали второй конструктор адаптера, который принимает аргумент, как показано ниже
public RecyclerViewAdapter (TimeFragment timeFragment, List lstBook) {
}
При этом вы фактически не заполнили список, как вы сделали в первом конструкторе, показанном ниже.
public RecyclerViewAdapter(Context mContext, List<Book> mData) {
this.mContext = mContext;
this.mData = mData;
}
Теперь приложение аварийно завершает работу, потому что, когда оно находит список в адаптере, оно всегда пусто.так что вылетает.Я изменил несколько строк кода как в части адаптера, так и в части фрагмента.Пожалуйста, найдите изменения ниже.
RecyclerViewAdapter:
public class RecyclerViewAdapter extends RecyclerView.Adapter<RecyclerViewAdapter.MyViewHolder> {
private Context mContext ;
private List<Book> mData ;
private TimeFragment timeFragment;
public RecyclerViewAdapter(Context mContext, List<Book> mData) {
this.mContext = mContext;
this.mData = mData;
}
public RecyclerViewAdapter(TimeFragment timeFragment, List<Book> lstBook) {
this.timeFragment = timeFragment;
this.mData = lstBook;
}
@Override
public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view ;
LayoutInflater mInflater = LayoutInflater.from(timeFragment.getContext());
view = mInflater.inflate(R.layout.cardveiw_item_book,parent,false);
return new MyViewHolder(view);
}
@Override
public void onBindViewHolder(MyViewHolder holder, final int position) {
holder.tv_book_title.setText(mData.get(position).getTitle());
holder.img_book_thumbnail.setImageResource(mData.get(position).getThumbnail());
}
@Override
public int getItemCount() {
return mData.size();
}
public static class MyViewHolder extends RecyclerView.ViewHolder {
public TextView tv_book_title;
public ImageView img_book_thumbnail;
CardView cardView ;
public MyViewHolder(View itemView) {
super(itemView);
tv_book_title = (TextView) itemView.findViewById(R.id.book_title_id) ;
img_book_thumbnail = (ImageView) itemView.findViewById(R.id.book_img_id);
cardView = (CardView) itemView.findViewById(R.id.cardview_id);
}
}
}
Фрагмент времени:
public class TimeFragment extends Fragment {
List<Book> lstBook ;
public TimeFragment() {
// Required empty public constructor
}
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Log.d("TestFailed","OnCreate");
lstBook = new ArrayList<>();
lstBook.add(new Book("The Vegitarian","Categorie Book","Description book",R.drawable.ic_launcher_background));
lstBook.add(new Book("The Wild Robot","Categorie Book","Description book",R.drawable.ic_launcher_background));
lstBook.add(new Book("Maria Semples","Categorie Book","Description book",R.drawable.ic_launcher_background));
lstBook.add(new Book("The Martian","Categorie Book","Description book",R.drawable.ic_launcher_background));
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
Log.d("TestFailed","OnCreateView");
View view = inflater.inflate(R.layout.fragment_time, container, false);
RecyclerView myrv = (RecyclerView) view.findViewById(R.id.recyclerview_id);
RecyclerViewAdapter myAdapter = new RecyclerViewAdapter(this,lstBook);
GridLayoutManager gridLayoutManager = new GridLayoutManager(getContext(), 2);
myrv.setLayoutManager(gridLayoutManager);
myrv.setAdapter(myAdapter);
return view;
}
}
Надежда, которая помогает и устраняет сомнения.