Reciclar visualização inflando linha diferente: - Obtendo exceção ao vincular os dados
Estou trabalhando noRecyceview
com inflação de itens diferentes. Quando eu estouNÃO vinculando os dados emonBindViewHolder
método deRecycleView
do que não trava ..
Mas quando eu estou ligando os dados dentro doonBindViewHolder
do que estou recebendoException
Verifique o meu código e deixe-me saber onde estou fazendo errado.
package com.tv.practise.adapter;
/**
Created by Ravindra Kushwaha on 10/10/16.
*/
public class RecycleDataAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
private Context mContext;
private ArrayList<RecycleBen> data;
public static class SimpleText extends RecyclerView.ViewHolder {
TextView first_data_tv;
public SimpleText(View v) {
super(v);
this.first_data_tv = (TextView) v.findViewById(R.id.first_data_tv);
}
}
public class SimpleImage extends RecyclerView.ViewHolder {
ImageView second_data_iv;
public SimpleImage(View v) {
super(v);
this.second_data_iv = (ImageView) v.findViewById(R.id.second_data_iv);
}
}
public class SimpleImageWithText extends RecyclerView.ViewHolder {
TextView third_data_tv;
ImageView third_iv;
public SimpleImageWithText(View v) {
super(v);
this.third_data_tv = (TextView) v.findViewById(R.id.third_data_tv);
this.third_iv = (ImageView) v.findViewById(R.id.third_iv);
}
}
public RecycleDataAdapter(Context mContext, ArrayList<RecycleBen> data) {
this.mContext = mContext;
this.data = data;
}
@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
int listViewItemType = getItemViewType(viewType);
View itemView;
if(listViewItemType==1)
{
itemView = LayoutInflater.from(parent.getContext())
.inflate(R.layout.recycle_first_item, parent, false);
return new SimpleText(itemView
);
}
else if(listViewItemType==2)
{
itemView = LayoutInflater.from(parent.getContext())
.inflate(R.layout.recycle_fsecond_item, parent, false);
return new SimpleImage(itemView);
}
else
{
itemView = LayoutInflater.from(parent.getContext())
.inflate(R.layout.recycle_third_item, parent, false);
return new SimpleImageWithText(itemView);
}
}
@Override
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
RecycleBen bean = data.get(position);
if(holder.getItemViewType()==1)
{
/////HERE I AM GETTING THE EXCEPTION WHILE BINDIND DATA
((SimpleText)holder).first_data_tv.setText(bean.getName());
}
else if(holder.getItemViewType()==2)
{
}
else {
/////HERE I AM GETTING THE EXCEPTION WHILE BINDIND DATA((SimpleImageWithText)holder).third_data_tv.setText(bean.getName());
}
}
@Override
public int getItemViewType(int position) {
return Integer.parseInt(data.get(position).getType_row());
}
@Override
public int getItemCount() {
return data.size();
}
}
Exceção enquanto eu estou ligando os dados são os seguintes: -
3758-3758/com.tv.practise E/AndroidRuntime﹕ FATAL EXCEPTION: main
Process: com.tv.practise, PID: 3758
java.lang.ClassCastException: com.tv.practise.adapter.RecycleDataAdapter$SimpleImageWithText cannot be cast to com.tv.practise.adapter.RecycleDataAdapter$SimpleText
at com.tv.practise.adapter.RecycleDataAdapter.onBindViewHolder(RecycleDataAdapter.java:101)
at android.support.v7.widget.RecyclerView$Adapter.onBindViewHolder(RecyclerView.java:5471)
at android.support.v7.widget.RecyclerView$Adapter.bindViewHolder(RecyclerView.java:5504)
at android.support.v7.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:4741)
at android.support.v7.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:4617)
at android.support.v7.widget.LinearLayoutManager$LayoutState.next(LinearLayoutManager.java:1994)
at android.support.v7.widget.LinearLayoutManager.layoutChunk(LinearLayoutManager.java:1390)
at android.support.v7.widget.LinearLayoutManager.fill(LinearLayoutManager.java:1353)
at android.support.v7.widget.LinearLayoutManager.onLayoutChildren(LinearLayoutManager.java:574)
at android.support.v7.widget.RecyclerView.dispatchLayoutStep2(RecyclerView.java:3028)
at android.support.v7.widget.RecyclerView.onMeasure(RecyclerView.java:2625)
at android.view.View.measure(View.java:18804)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5954)
at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1465)
at android.widget.LinearLayout.measureVertical(LinearLayout.java:748)
at android.widget.LinearLayout.onMeasure(LinearLayout.java:630)
at android.view.View.measure(View.java:18804)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5954)
at android.widget.FrameLayout.onMeasure(FrameLayout.java:194)
at android.view.View.measure(View.java:18804)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5954)
at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1465)
at android.widget.LinearLayout.measureVertical(LinearLayout.java:748)
at android.widget.LinearLayout.onMeasure(LinearLayout.java:630)
at android.view.View.measure(View.java:18804)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5954)
at android.widget.FrameLayout.onMeasure(FrameLayout.java:194)
at com.android.internal.policy.PhoneWindow$DecorView.onMeasure(PhoneWindow.java:2643)
at android.view.View.measure(View.java:18804)
at android.view.ViewRootImpl.performMeasure(ViewRootImpl.java:2112)
at android.view.ViewRootImpl.measureHierarchy(ViewRootImpl.java:1228)
at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1464)
at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1119)
at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:6060)
at android.view.Choreographer$CallbackRecord.run(Choreographer.java:858)
at android.view.Choreographer.doCallbacks(Choreographer.java:670)
at android.view.Choreographer.doFrame(Choreographer.java:606)
at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:844)
at android.os.Handler.handleCallback(Handler.java:746)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:148)
at android.app.ActivityThread.main(ActivityThread.java:5443)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:728)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618)