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 .
textViewResourceId
que 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.MyClass
requeriría que agregue una clase dedicada llamadaMyClassView
que 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