@MikkiMouse

Как изменить ViewHolder на ходу?

Добрый день, такая проблема:
Есть заполненный RecyclerView
В адаптере для этого RecyclerView я сделал два типа ViewHolder'ов: VHItem_1 и VHItem_2
По умолчанию показывается VHItem_1
Я хочу чтобы при нажатии на кнопку в приложении все VHItem_1 поменялись на VHItem_2
Как это можно сделать?

private static class RecyclerViewAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
	...
	
	public RecyclerViewAdapter(Context context, ArrayList<MyObject> dataset) {
		mDataset= dataset;
		mCondition = true;
	}

	@Override
	public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
		View v;
		if(mCondition) {
			v = LayoutInflater.from(parent.getContext()).inflate(R.layout.layout_1, parent, false);
			return new VHItem_1(v);
		} else {
			v = LayoutInflater.from(parent.getContext()).inflate(R.layout.layout_2, parent, false);
			return new VHItem_2(v);
		}
	}
	
	@Override
	public void onBindViewHolder(RecyclerView.ViewHolder holder, final int position) {
		if(mCondition) {
			VHItem_1 itemHolder = (VHItem_1) holder;
			itemHolder.setItem(position);
		} else {
			VHItem_2 itemHolder = (VHItem_2) holder;
			itemHolder.setItem(position);
		}
	}

	@Override
	public int getItemCount() {
		return mDataSet.size();
	}

	@Override
	public int getItemViewType(int position) {
		if(mCondition)
			return 0;
		else
			return 1;
	}
	
	public void changeCondition(boolean value) {
		mCondition = value;
		notifyDataSetChanged();
	}
	
	
	
	class VHItem_1 extends RecyclerView.ViewHolder {
		...
	}
	
	class VHItem_2 extends RecyclerView.ViewHolder {
		...
	}
}

Получается после нажатия на кнопку я вызываю метод changeCondition() и получаю ошибку о невозможности преобразования VHItem_1 в VHItem_2. Как быть?
  • Вопрос задан
  • 354 просмотра
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы