Tôi đang cố gắng sử dụng nhiều ViewHolders trong RecyclerView để hoán đổi các chế độ xem này trong thời gian chạy. Tôi đã tạo ra hai lớp mà mở rộng RecyclerView.ViewHolder:RecyclerView onCreateViewHolder Loại tương phản không tương thích với nhiều ViewHolders tùy chỉnh
MenuItemViewHolder
public class MenuItemViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
public TextView menuItemText;
public ImageView menuItemPhoto;
public RecyclerViewAdapter rva;
public MenuItemViewHolder(View itemView) {
super(itemView);
itemView.setOnClickListener(this);
rva = caller;
menuItemText = (TextView) itemView.findViewById(R.id.grid_text);
menuItemPhoto = (ImageView) itemView.findViewById(R.id.grid_image);
}
@Override
public void onClick(View view) {
Toast.makeText(view.getContext(), "Clicked Position = " + getPosition(), Toast.LENGTH_SHORT).show();
}
}
SelectedItemViewHolder
public class SelectedItemViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
public TextView menuItemText;
public ImageView menuItemPhoto;
public RecyclerViewAdapter rva;
public SelectedItemViewHolder(View itemView) {
super(itemView);
itemView.setOnClickListener(this);
menuItemText = (TextView) itemView.findViewById(R.id.grid_text_full);
menuItemPhoto = (ImageView) itemView.findViewById(R.id.grid_image_full);
}
@Override
public void onClick(View view) {
Toast.makeText(view.getContext(), "Clicked Position = " + getPosition(), Toast.LENGTH_SHORT).show();
}
}
Họ được gọi là trong phạm vi chức năng onCreateViewHolder lớp RecyclerViewAdapter của tôi:
RecyclerViewAdapter onCreateViewHolder
// Create new views (invoked by the layout manager)
@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
switch (viewType) {
case 0:
View gridItemLayout = LayoutInflater.from(parent.getContext())
.inflate(R.layout.grid_single, parent, false);
// set the view's size, margins, paddings and layout parameters
MenuItemViewHolder vh = new MenuItemViewHolder(gridItemLayout);
case 2:
View selectedItemLayout = LayoutInflater.from(parent.getContext())
.inflate(R.layout.grid_single_full, parent, false);
// set the view's size, margins, paddings and layout parameters
SelectedItemViewHolder sivh = new SelectedItemViewHolder(selectedItemLayout);
return sivh;
}
}
Khi tôi cố gắng chạy mã, tôi nhận được lỗi này:
Vì vậy, vấn đề có vẻ là onCreateViewHolder không chấp nhận các lớp tùy chỉnh của tôi khi được thừa hưởng từ RecyclerView.ViewHolder. Tôi đang sử dụng Android Studio, vì vậy có lẽ vấn đề là ở đó. Tôi lúng túng, vì tôi nghĩ rằng Java thừa kế sẽ xử lý điều này mà không có vấn đề gì. Ai đó có thể đề xuất một giải pháp?
Chỉnh sửa: Khi tôi thay đổi kiểu trả về của onCreateViewHolder thành MenuItemViewHolder chỉ với một VH, mọi thứ hoạt động tốt. Tuy nhiên, điều này không hoạt động khi tôi có nhiều lớp VH có thể được hoán đổi bất cứ lúc nào.
Định nghĩa lớp học của 'RecyclerViewAdapter' là gì? – ianhanniballake