Cómo usar ArrayAdapter

ArrayList myList = new ArrayList(); ListView listView = (ListView) findViewById(R.id.list); ArrayAdapter adapter = new ArrayAdapter(this, R.layout.row, to, myList.); listView.setAdapter(adapter); 

Clase: MyClass

 class MyClass { public String reason; public long long_val; } 

He creado row.xml en diseños, pero no sé cómo mostrar tanto reason como long_val en ListView usando ArrayAdapter.

Implemente un adaptador personalizado para su clase:

 public class MyClassAdapter extends ArrayAdapter { private static class ViewHolder { private TextView itemView; } public MyClassAdapter(Context context, int textViewResourceId, ArrayList 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 mayor detalle aquí: https://github.com/codepath/android_guides/wiki/Using-an-ArrayAdapter-with-ListView .

Puede agregar un método toString() a MyClass, por http://developer.android.com/reference/android/widget/ArrayAdapter.html :

Sin embargo, se hace referencia a TextView, se rellenará con toString () de cada objeto en la matriz. Puede agregar listas o matrices de objetos personalizados. Anule el método toString () de sus objetos para determinar qué texto se mostrará para el elemento en la lista.

 class MyClass { @Override public String toString() { return "Hello, world."; } } 

Creo que este es el mejor enfoque. Usar la clase ArrayAdapter genérica y extender su propio adaptador de objeto es tan simple como sigue:

 public abstract class GenericArrayAdapter extends ArrayAdapter { // Vars private LayoutInflater mInflater; public GenericArrayAdapter(Context context, ArrayList objects) { super(context, 0, objects); init(context); } // Headers public abstract void drawText(TextView textView, T object); private void init(Context context) { this.mInflater = LayoutInflater.from(context); } @Override public View getView(int position, View convertView, ViewGroup parent) { final ViewHolder vh; if (convertView == null) { convertView = mInflater.inflate(android.R.layout.simple_list_item_1, parent, false); vh = new ViewHolder(convertView); convertView.setTag(vh); } else { vh = (ViewHolder) convertView.getTag(); } drawText(vh.textView, getItem(position)); return convertView; } static class ViewHolder { TextView textView; private ViewHolder(View rootView) { textView = (TextView) rootView.findViewById(android.R.id.text1); } } } 

y aquí su adaptador (ejemplo):

 public class SizeArrayAdapter extends GenericArrayAdapter { public SizeArrayAdapter(Context context, ArrayList objects) { super(context, objects); } @Override public void drawText(TextView textView, Size object) { textView.setText(object.getName()); } } 

y finalmente, cómo inicializarlo:

 ArrayList sizes = getArguments().getParcelableArrayList(Constants.ARG_PRODUCT_SIZES); SizeArrayAdapter sizeArrayAdapter = new SizeArrayAdapter(getActivity(), sizes); listView.setAdapter(sizeArrayAdapter); 

He creado un Gist con ajuste de TextView gravedad adaptable ArrayAdapter:

https://gist.github.com/m3n0R/8822803

Subclase el ArrayAdapter y anule el método getView () para devolver su propia vista que contiene los contenidos que desea visualizar.

Aquí hay un ejemplo rápido y sucio de cómo usar un ArrayAdapter si no quieres molestarte con extender la clase madre:

 class MyClass extends Activity { private ArrayAdapter mAdapter = null; @Override protected void onCreate(Bundle savedInstanceState) { mAdapter = new ArrayAdapter(getApplicationContext(), android.R.layout.simple_dropdown_item_1line, android.R.id.text1); final ListView list = (ListView) findViewById(R.id.list); list.setAdapter(mAdapter); //Add Some Items in your list: for (int i = 1; i <= 10; i++) { mAdapter.add("Item " + i); } // And if you want selection feedback: list.setOnItemClickListener(new OnItemClickListener() { @Override public void onItemClick(AdapterView parent, View view, int position, long id) { //Do whatever you want with the selected item Log.d(TAG, mAdapter.getItem(position) + " has been selected!"); } }); } }