具有多个视图持有者的 RecyclerViewAdapter 中的铸造问题

问题描述

大家好,我正在尝试将标题和项目添加到我的回收站视图中。但是在尝试打开页面后,它给了我一个铸造错误。我检查了我的代码,但如果你想检查这是代码,我找不到错误

公共类 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;

}

}

And this is the error

解决方法

我修复了错误,问题出在 getItemViewType 部分。这就是我更改代码的方式。我删除了 isPositionHeader 方法,它们是不必要的

public int getItemViewType(int position) {
    if(listItems.get(position).getId() == 1)
        return TYPE_HEADER;
    return TYPE_ITEM;
}

将“id”变量添加到我想用作视图的对象中,我使用它编写了函数。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...