El uso del ViewHolder nos va ayudar al rendimiento de nuestras listas. Este patrón de diseño es recomendado desde por el propio Google desde antes que tuvieramos un widget como el RecyclerView.
El RecyclerView fué presentado el año pasado como un nuevo widget (El cuál aún no está terminado) que nos permite la presentación de items de información, como un ListView o un GridView
El RecyclerView no se preocupa por el rendimiento en el dibujado o en acomodar de una manera correcta. Lo unico que le importa es el reciclado.
La representación de tus datos va a depender de las siguientes clases.
compile 'com.android.support:recyclerview-v7:21.0.+'
RecyclerView mRecyclerView;
@Override
public View onCreateView (LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.fragment_main, container, false);
//El LayoutManager define la distribución que tendrán los items del RecyclerView
LinearLayoutManager layoutManager = new LinearLayoutManager(context);
layoutManager.setOrientation(LinearLayoutManager.VERTICAL);
mRecyclerView.setLayoutManager(layoutManager);
return rootView;
}public class RecyclerViewDemoAdapter extends
RecyclerView.Adapter
<RecyclerViewDemoAdapter.ListItemViewHolder> {
private List<DemoModel> items;
RecyclerViewDemoAdapter(List<DemoModel> modelData) {
if (modelData == null) {
throw new IllegalArgumentException(
"modelData must not be null");
}
this.items = modelData;
}
@Override
public ListItemViewHolder onCreateViewHolder(
ViewGroup viewGroup, int viewType) {
View itemView = LayoutInflater.
from(viewGroup.getContext()).
inflate(R.layout.item_demo_01,
viewGroup,
false);
return new ListItemViewHolder(itemView);
}
@Override
public void onBindViewHolder(
ListItemViewHolder viewHolder, int position) {
DemoModel model = items.get(position);
viewHolder.label.setText(model.label);
String dateStr = DateUtils.formatDateTime(
viewHolder.label.getContext(),
model.dateTime.getTime(),
DateUtils.FORMAT_ABBREV_ALL);
viewHolder.dateTime.setText(dateStr);
}
@Override
public int getItemCount() {
return items.size();
}
public final static class ListItemViewHolder
extends RecyclerView.ViewHolder {
// … shown above in the ViewHolder section
}
}