setadapter new example ejemplo custom arrayadapter android arraylist

android - new - Cómo usar ArrayAdapter<myClass>



listview setadapter (5)

ArrayList<MyClass> myList = new ArrayList<MyClass>(); ListView listView = (ListView) findViewById(R.id.list); ArrayAdapter<MyClass> adapter = new ArrayAdapter<MyClass>(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.


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<String> mAdapter = null; @Override protected void onCreate(Bundle savedInstanceState) { mAdapter = new ArrayAdapter<String>(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!"); } }); } }


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<T> extends ArrayAdapter<T> { // Vars private LayoutInflater mInflater; public GenericArrayAdapter(Context context, ArrayList<T> 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<Size> { public SizeArrayAdapter(Context context, ArrayList<Size> objects) { super(context, objects); } @Override public void drawText(TextView textView, Size object) { textView.setText(object.getName()); } }

y finalmente, cómo inicializarlo:

ArrayList<Size> 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


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 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."; } }


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