Implemente un adaptador personalizado para su clase:
public class MyClassAdapter extends ArrayAdapter<MyClass> {
private static class ViewHolder {
private TextView itemView;
}
public MyClassAdapter(Context context, int textViewResourceId, ArrayList<MyClass> items) {
super(context, textViewResourceId, items);
}
public View getView(int position, View convertView, ViewGroup parent) {
if (convertView == null) {
convertView = LayoutInflater.from(this.getContext())
.inflate(R.layout.listview_association, parent, false);
viewHolder = new ViewHolder();
viewHolder.itemView = (TextView) convertView.findViewById(R.id.ItemView);
convertView.setTag(viewHolder);
} else {
viewHolder = (ViewHolder) convertView.getTag();
}
MyClass item = getItem(position);
if (item!= null) {
// My layout has only one TextView
// do whatever you want with your string and long
viewHolder.itemView.setText(String.format("%s %d", item.reason, item.long_val));
}
return convertView;
}
}
Para aquellos que no están muy familiarizados con el marco de Android, esto se explica con más detalle aquí: https://github.com/codepath/android_guides/wiki/Using-an-ArrayAdapter-with-ListView .
textViewResourceIdque no se usa arriba?Simplemente puede agregar un
toString()método a MyClass, según http://developer.android.com/reference/android/widget/ArrayAdapter.html :fuente
MyClass, tendrá que refactorizar. Finalmente, generalmente es una mala idea vincular la lógica de presentación a sus modelos. Los modelos no deben saber cómo se presentan al usuario.MyClassrequeriría que agregue una clase dedicada llamadaMyClassViewque envuelva el modelo subyacente (y proporcione latoString( )implementaciónCreo que este es el mejor enfoque. Usar la clase ArrayAdapter genérica y extender su propio adaptador de objetos es tan simple como sigue:
y aquí tu adaptador (ejemplo):
y finalmente, cómo inicializarlo:
Creé un Gist con ArrayAdapter personalizable por gravedad de diseño TextView:
https://gist.github.com/m3n0R/8822803
fuente
Subclase el ArrayAdapter y anule el método getView () para devolver su propia vista que contiene el contenido que desea mostrar.
fuente
Aquí hay un ejemplo rápido y sucio de cómo usar un ArrayAdapter si no quiere molestarse en extender la clase madre:
fuente