Hey everyone ım trying to add Headers and Items to my recyclerview. But after trying to open the page, its giving me a casting error. I checked my code but ı couldn't find an error for this if you wanna check this is the code
public class NewRecyclerViewAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
private static final int TYPE_HEADER = 0;
private static final int TYPE_ITEM = 1;
Context mContext;
List<ListItem> listItems;
public NewRecyclerViewAdapter(Context context, List<ListItem> listItems) {
mContext = context;
this.listItems = listItems;
}
@NonNull
@Override
public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
if(viewType == TYPE_HEADER) {
View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.header_layout, parent, false);
return new VHHeader(v);
}else if(viewType == TYPE_ITEM) {
View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.cardview_item, parent, false);
return new VHItem(v);
}
throw new RuntimeException("there is no type that matches the type " + viewType + " + make sure your using types correctly");
}
@Override
public void onBindViewHolder(@NonNull final RecyclerView.ViewHolder holder, int position) {
if(holder instanceof VHHeader)
{
HeaderTest currentItem = (HeaderTest) listItems.get(position);
VHHeader vhHeader = (VHHeader) holder;
vhHeader.headerText.setText(currentItem.getName());
vhHeader.headerImage.setImageResource(currentItem.getImage());
}
else if(holder instanceof VHItem)
{
PosterTest currentItem = (PosterTest) listItems.get(position);
VHItem vhItem = (VHItem) holder;
vhItem.textPosterTitle.setText(currentItem.getName());
vhItem.posterImageView.setImageResource(currentItem.getImage());
}
}
// need to override this method
@Override
public int getItemViewType(int position) {
if(isPositionHeader(position))
return TYPE_HEADER;
return TYPE_ITEM;
}
private boolean isPositionHeader(int position)
{
return position == 0;
}
@Override
public int getItemCount() {
return listItems.size();
}
class VHItem extends RecyclerView.ViewHolder {
private TextView textPosterTitle;
private ImageView posterImageView;
private CardView cardView;
public VHItem(@NonNull View itemView) {
super(itemView);
textPosterTitle = (TextView) itemView.findViewById(R.id.poster_title_id);
posterImageView = (ImageView) itemView.findViewById(R.id.poster_image_id);
cardView = (CardView) itemView.findViewById(R.id.cardview_id);
}
}
class VHHeader extends RecyclerView.ViewHolder{
private TextView headerText;
private ImageView headerImage;
public VHHeader(@NonNull View itemView) {
super(itemView);
headerText = (TextView) itemView.findViewById(R.id.headerText);
headerImage = (ImageView) itemView.findViewById(R.id.headerImage);
}
}
}
public class ProductsFragment extends Fragment {
private RecyclerView mRecyclerView;
public List<ListItem> mData;
NewRecyclerViewAdapter adapter;
public ProductsFragment() {
}
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_products, container, false);
mRecyclerView = view.findViewById(R.id.recyclerView);
mRecyclerView.setLayoutManager(new LinearLayoutManager(getContext()));
getListData();
adapter = new NewRecyclerViewAdapter(getContext(),mData);
mRecyclerView.setAdapter(adapter);
return view;
}
private void getListData() {
mData = DataList.getTimeLineData();
}
}
public class DataList{ public static List getTimeLineData(){
List<ListItem> combinedList = new ArrayList<>();
List<ListItem> movieList = new ArrayList<>();
HeaderTest itemHeaderMovies = new HeaderTest("Movies", R.drawable.dof_logo,1);
PosterTest itemPosterMovies = new PosterTest("poster1",R.drawable.aerobotics,1);
PosterTest itemPosterMoviesTwo = new PosterTest("poster2",R.drawable.aerobotics,1);
movieList.add(itemHeaderMovies);
movieList.add(itemPosterMovies);
movieList.add(itemPosterMoviesTwo);
List<ListItem> productList = new ArrayList<>();
HeaderTest itemHeaderProduct = new HeaderTest("Product",R.drawable.dof_logo,1);
PosterTest itemPosterProduct = new PosterTest("poster3",R.drawable.aerobotics,1);
PosterTest itemPosterProductTwo = new PosterTest("poster4",R.drawable.aerobotics,1);
movieList.add(itemHeaderProduct);
movieList.add(itemPosterProduct);
movieList.add(itemPosterProductTwo);
combinedList.addAll(movieList);
combinedList.addAll(productList);
return combinedList;
}
}
I fixed the errors, the problem was in the getItemViewType part. This is how I changed my code. and I deleted the isPositionHeader method, they were unnecessary
ı add the "id" variable to the objects that ı wanted to use as view and ı wrote the function with using it.