问题描述
大家好,我正在尝试将标题和项目添加到我的回收站视图中。但是在尝试打开页面后,它给了我一个铸造错误。我检查了我的代码,但如果你想检查这是代码,我找不到错误
公共类 NewRecyclerViewAdapter 扩展 RecyclerView.Adapter
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,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();
}
}
公共类数据列表{ 公共静态列表 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",1);
movieList.add(itemHeaderMovies);
movieList.add(itemPosterMovies);
movieList.add(itemPosterMoviesTwo);
List<ListItem> productList = new ArrayList<>();
HeaderTest itemHeaderProduct = new HeaderTest("Product",1);
PosterTest itemPosterProduct = new PosterTest("poster3",1);
PosterTest itemPosterProductTwo = new PosterTest("poster4",1);
movieList.add(itemHeaderProduct);
movieList.add(itemPosterProduct);
movieList.add(itemPosterProductTwo);
combinedList.addAll(movieList);
combinedList.addAll(productList);
return combinedList;
}
}
解决方法
我修复了错误,问题出在 getItemViewType 部分。这就是我更改代码的方式。我删除了 isPositionHeader 方法,它们是不必要的
public int getItemViewType(int position) {
if(listItems.get(position).getId() == 1)
return TYPE_HEADER;
return TYPE_ITEM;
}
将“id”变量添加到我想用作视图的对象中,我使用它编写了函数。