Hong:
Acabo de unirme a este foro dentro de una semana y he encontrado un problema con RecyclerView.Adapter en Android.
Siguiendo los códigos de muestra y la documentación, he intentado construir una clase adaptador personalizado por mí y se me quedó en uno de los métodos heredados de su superclase, RecyclerView.Adapter. Aunque escribo una clase interna heredó el viewholder al igual que el código de ejemplo, todavía tiene errores cuando se trata de la onBindViewHolder ()
aquí es mi código de la clase interna:
public static class ViewHolder extends RecyclerView.ViewHolder{
private final TextView tvTitle,tvDate,tvTime;
public ViewHolder(View v){
super(v);
Log.d(TAG,"building view holder");
tvTitle=v.findViewById(R.id.item_tvTitle);
tvDate=v.findViewById(R.id.item_tvDate);
tvTime=v.findViewById(R.id.item_tvTime);
//set onclick listener to start another activity
v.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
}
});
}
public TextView getTvTitle(){return tvTitle;}
public TextView getTvDate(){return tvDate;}
public TextView getTvTime(){return tvTime;}
}
aquí es mi código del adaptador:
public class EventAdapter extends RecyclerView.Adapter {
private static final String TAG="EventAdapter";
private Event[] dataset;
public static class ViewHolder extends RecyclerView.ViewHolder{
private final TextView tvTitle,tvDate,tvTime;
public ViewHolder(View v){
super(v);
Log.d(TAG,"building view holder");
tvTitle=v.findViewById(R.id.item_tvTitle);
tvDate=v.findViewById(R.id.item_tvDate);
tvTime=v.findViewById(R.id.item_tvTime);
//set onclick listener to start another activity
v.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
}
});
}
public TextView getTvTitle(){return tvTitle;}
public TextView getTvDate(){return tvDate;}
public TextView getTvTime(){return tvTime;}
}
public EventAdapter(List<Event> dataset){
Log.d(TAG,"Constructor, converting list to array");
this.dataset=dataset.toArray(new Event[dataset.size()]);
}
@Override
public ViewHolder onCreateViewHolder(ViewGroup container,int viewType){
Log.d(TAG,"onCreateViewHolder");
View v= LayoutInflater.from(container.getContext()).inflate(R.layout.item_event,container,false);
return new ViewHolder(v);
}
@Override
public void onBindViewHolder(ViewHolder viewHolder, final int position){
Log.d(TAG,"onBindViewHolder");
viewHolder.getTvTitle().setText("Title: "+dataset[position].getTitle());
viewHolder.getTvDate().setText("Date: "+dataset[position].getDate());
viewHolder.getTvTime().setText("Time: "+dataset[position].getTime());
}
@Override
public int getItemCount(){return dataset.length;}
}
Y aquí están los errores Muestra:
1. class 'EventAdapter'(which is my class inherited from the adapter) must either declared as abstract or implements abstract method onBindViewHolder(VH,int) in 'Adapter'
2. method(means the onBindViewHolder) does not override or implement a method from a supertype
Gracias por la solución de mi problema
Yrii Borodkin:
Por lo tanto, para compilar correctamente, el cambio
public class EventAdapter extends RecyclerView.Adapter<EventAdapter.ViewHolder>
y
public void onBindViewHolder(EventAdapter.ViewHolder viewHolder, final int position)