studio personalizado elementos ejemplo editar diseƱo dinamico desplegable custom agregar android listview android-tablelayout custom-adapter

android - elementos - Adaptador personalizado para la vista de lista



listview dinamico android studio (13)

Quiero crear un custom adapter para mi vista de lista. ¿Hay algún artículo que pueda explicarme cómo crear uno y también explicar cómo funciona?


Modelo de datos

public class DataModel { String name; String type; String version_number; String feature; public DataModel(String name, String type, String version_number, String feature ) { this.name=name; this.type=type; this.version_number=version_number; this.feature=feature; } public String getName() { return name; } public String getType() { return type; } public String getVersion_number() { return version_number; } public String getFeature() { return feature; } }

Adaptador de matriz

public class CustomAdapter extends ArrayAdapter<DataModel> implements View.OnClickListener{ private ArrayList<DataModel> dataSet; Context mContext; // View lookup cache private static class ViewHolder { TextView txtName; TextView txtType; TextView txtVersion; ImageView info; } public CustomAdapter(ArrayList<DataModel> data, Context context) { super(context, R.layout.row_item, data); this.dataSet = data; this.mContext=context; } @Override public void onClick(View v) { int position=(Integer) v.getTag(); Object object= getItem(position); DataModel dataModel=(DataModel)object; switch (v.getId()) { case R.id.item_info: Snackbar.make(v, "Release date " +dataModel.getFeature(), Snackbar.LENGTH_LONG) .setAction("No action", null).show(); break; } } private int lastPosition = -1; @Override public View getView(int position, View convertView, ViewGroup parent) { // Get the data item for this position DataModel dataModel = getItem(position); // Check if an existing view is being reused, otherwise inflate the view ViewHolder viewHolder; // view lookup cache stored in tag final View result; if (convertView == null) { viewHolder = new ViewHolder(); LayoutInflater inflater = LayoutInflater.from(getContext()); convertView = inflater.inflate(R.layout.row_item, parent, null); viewHolder.txtName = (TextView) convertView.findViewById(R.id.name); viewHolder.txtType = (TextView) convertView.findViewById(R.id.type); viewHolder.txtVersion = (TextView) convertView.findViewById(R.id.version_number); viewHolder.info = (ImageView) convertView.findViewById(R.id.item_info); result=convertView; convertView.setTag(viewHolder); } else { viewHolder = (ViewHolder) convertView.getTag(); result=convertView; } Animation animation = AnimationUtils.loadAnimation(mContext, (position > lastPosition) ? R.anim.up_from_bottom : R.anim.down_from_top); result.startAnimation(animation); lastPosition = position; viewHolder.txtName.setText(dataModel.getName()); viewHolder.txtType.setText(dataModel.getType()); viewHolder.txtVersion.setText(dataModel.getVersion_number()); viewHolder.info.setOnClickListener(this); viewHolder.info.setTag(position); // Return the completed view to render on screen return convertView; } }

Actividad principal

public class MainActivity extends AppCompatActivity { ArrayList<DataModel> dataModels; ListView listView; private static CustomAdapter adapter; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); setSupportActionBar(toolbar); listView=(ListView)findViewById(R.id.list); dataModels= new ArrayList<>(); dataModels.add(new DataModel("Apple Pie", "Android 1.0", "1","September 23, 2008")); dataModels.add(new DataModel("Banana Bread", "Android 1.1", "2","February 9, 2009")); dataModels.add(new DataModel("Cupcake", "Android 1.5", "3","April 27, 2009")); dataModels.add(new DataModel("Donut","Android 1.6","4","September 15, 2009")); dataModels.add(new DataModel("Eclair", "Android 2.0", "5","October 26, 2009")); dataModels.add(new DataModel("Froyo", "Android 2.2", "8","May 20, 2010")); dataModels.add(new DataModel("Gingerbread", "Android 2.3", "9","December 6, 2010")); dataModels.add(new DataModel("Honeycomb","Android 3.0","11","February 22, 2011")); dataModels.add(new DataModel("Ice Cream Sandwich", "Android 4.0", "14","October 18, 2011")); dataModels.add(new DataModel("Jelly Bean", "Android 4.2", "16","July 9, 2012")); dataModels.add(new DataModel("Kitkat", "Android 4.4", "19","October 31, 2013")); dataModels.add(new DataModel("Lollipop","Android 5.0","21","November 12, 2014")); dataModels.add(new DataModel("Marshmallow", "Android 6.0", "23","October 5, 2015")); adapter= new CustomAdapter(dataModels,getApplicationContext()); listView.setAdapter(adapter); listView.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { DataModel dataModel= dataModels.get(position); Snackbar.make(view, dataModel.getName()+"/n"+dataModel.getType()+" API: "+dataModel.getVersion_number(), Snackbar.LENGTH_LONG) .setAction("No action", null).show(); } }); } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.menu_main, menu); return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { // Handle action bar item clicks here. The action bar will // automatically handle clicks on the Home/Up button, so long // as you specify a parent activity in AndroidManifest.xml. int id = item.getItemId(); //noinspection SimplifiableIfStatement if (id == R.id.action_settings) { return true; } return super.onOptionsItemSelected(item); } }

row_item.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="vertical" android:padding="10dp"> <TextView android:id="@+id/name" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentTop="true" android:text="Marshmallow" android:textAppearance="?android:attr/textAppearanceSmall" android:textColor="@android:color/black" /> <TextView android:id="@+id/type" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_below="@+id/name" android:layout_marginTop="5dp" android:text="Android 6.0" android:textColor="@android:color/black" /> <ImageView android:id="@+id/item_info" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentEnd="true" android:layout_alignParentRight="true" android:layout_centerVertical="true" android:src="@android:drawable/ic_dialog_info" /> <LinearLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerInParent="true"> <TextView android:id="@+id/version_heading" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="API: " android:textColor="@android:color/black" android:textStyle="bold" /> <TextView android:id="@+id/version_number" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="23" android:textAppearance="?android:attr/textAppearanceButton" android:textColor="@android:color/black" android:textStyle="bold" /> </LinearLayout> </RelativeLayout>


Aquí está el recorrido completo para crear un adaptador personalizado para la vista de lista paso a paso:

https://www.caveofprogramming.com/guest-posts/custom-listview-with-imageview-and-textview-in-android.html

public class CustomAdapter extends BaseAdapter{ String [] result; Context context; int [] imageId; private static LayoutInflater inflater=null; public CustomAdapter(MainActivity mainActivity, String[] prgmNameList, int[] prgmImages) { // TODO Auto-generated constructor stub result=prgmNameList; context=mainActivity; imageId=prgmImages; inflater = ( LayoutInflater )context. getSystemService(Context.LAYOUT_INFLATER_SERVICE); } @Override public int getCount() { // TODO Auto-generated method stub return result.length; } @Override public Object getItem(int position) { // TODO Auto-generated method stub return position; } @Override public long getItemId(int position) { // TODO Auto-generated method stub return position; } public class Holder { TextView tv; ImageView img; } @Override public View getView(final int position, View convertView, ViewGroup parent) { // TODO Auto-generated method stub Holder holder=new Holder(); View rowView; rowView = inflater.inflate(R.layout.program_list, null); holder.tv=(TextView) rowView.findViewById(R.id.textView1); holder.img=(ImageView) rowView.findViewById(R.id.imageView1); holder.tv.setText(result[position]); holder.img.setImageResource(imageId[position]); rowView.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub Toast.makeText(context, "You Clicked "+result[position], Toast.LENGTH_LONG).show(); } }); return rowView; } }


Es muy simple.

import android.content.Context; import android.content.DialogInterface; import android.support.annotation.NonNull; import android.support.annotation.Nullable; import android.support.v7.app.AlertDialog; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.ArrayAdapter; import android.widget.Button; import android.widget.ImageView; import android.widget.TextView; import java.util.List; /** * Created by Belal on 9/14/2017. */ //we need to extend the ArrayAdapter class as we are building an adapter public class MyListAdapter extends ArrayAdapter<Hero> { //the list values in the List of type hero List<Hero> heroList; //activity context Context context; //the layout resource file for the list items int resource; //constructor initializing the values public MyListAdapter(Context context, int resource, List<Hero> heroList) { super(context, resource, heroList); this.context = context; this.resource = resource; this.heroList = heroList; } //this will return the ListView Item as a View @NonNull @Override public View getView(final int position, @Nullable View convertView, @NonNull ViewGroup parent) { //we need to get the view of the xml for our list item //And for this we need a layoutinflater LayoutInflater layoutInflater = LayoutInflater.from(context); //getting the view View view = layoutInflater.inflate(resource, null, false); //getting the view elements of the list from the view ImageView imageView = view.findViewById(R.id.imageView); TextView textViewName = view.findViewById(R.id.textViewName); TextView textViewTeam = view.findViewById(R.id.textViewTeam); Button buttonDelete = view.findViewById(R.id.buttonDelete); //getting the hero of the specified position Hero hero = heroList.get(position); //adding values to the list item imageView.setImageDrawable(context.getResources().getDrawable(hero.getImage())); textViewName.setText(hero.getName()); textViewTeam.setText(hero.getTeam()); //adding a click listener to the button to remove item from the list buttonDelete.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { //we will call this method to remove the selected value from the list //we are passing the position which is to be removed in the method removeHero(position); } }); //finally returning the view return view; } //this method will remove the item from the list private void removeHero(final int position) { //Creating an alert dialog to confirm the deletion AlertDialog.Builder builder = new AlertDialog.Builder(context); builder.setTitle("Are you sure you want to delete this?"); //if the response is positive in the alert builder.setPositiveButton("Yes", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialogInterface, int i) { //removing the item heroList.remove(position); //reloading the list notifyDataSetChanged(); } }); //if response is negative nothing is being done builder.setNegativeButton("No", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialogInterface, int i) { } }); //creating and displaying the alert dialog AlertDialog alertDialog = builder.create(); alertDialog.show(); } }

Fuente: Custom ListView Android Tutorial


Este código es fácil de entender.

three_horizontal_text_views_layout.xml

<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="horizontal" android:layout_width="match_parent" android:layout_height="match_parent"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/leftTextView"/> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/centreTextView"/> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/rightTextView"/> </LinearLayout>

ThreeStrings.java

public class ThreeStrings { private String left; private String right; private String centre; public ThreeStrings(String left, String right, String centre) { this.left = left; this.right = right; this.centre = centre; } }

ThreeHorizontalTextViewsAdapter.java

public class ThreeHorizontalTextViewsAdapter extends ArrayAdapter<ThreeStrings> { private int layoutResource; public ThreeHorizontalTextViewsAdapter(Context context, int layoutResource, List<ThreeStrings> threeStringsList) { super(context, layoutResource, threeStringsList); this.layoutResource = layoutResource; } @Override public View getView(int position, View convertView, ViewGroup parent) { View view = convertView; if (view == null) { LayoutInflater layoutInflater = LayoutInflater.from(getContext()); view = layoutInflater.inflate(layoutResource, null); } ThreeStrings threeStrings = getItem(position); if (threeStrings != null) { TextView leftTextView = (TextView) view.findViewById(R.id.leftTextView); TextView rightTextView = (TextView) view.findViewById(R.id.rightTextView); TextView centreTextView = (TextView) view.findViewById(R.id.centreTextView); if (leftTextView != null) { leftTextView.setText(threeStrings.getLeft()); } if (rightTextView != null) { rightTextView.setText(threeStrings.getRight()); } if (centreTextView != null) { centreTextView.setText(threeStrings.getCentre()); } } return view; } }

main_layout.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" android:paddingBottom="@dimen/activity_vertical_margin" android:orientation="vertical" tools:context="com.androidapplication.ListActivity"> <ListView android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@+id/listView"></ListView> </LinearLayout>

MainActivity.java

public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); List<ThreeStrings> threeStringsList = new ArrayList<>(); ThreeStrings threeStrings = new ThreeStrings("a", "b", "c"); threeStringsList.add(threeStrings); ListView listView = (ListView)findViewById(R.id.listView); ThreeHorizontalTextViewsAdapter threeHorizontalTextViewsAdapter = new ThreeHorizontalTextViewsAdapter(this, R.layout.three_horizontal_text_views_layout, threeStringsList); listView.setAdapter(threeHorizontalTextViewsAdapter); } //......}



Puedes echar un vistazo a esta muestra en el ApiDemos oficial. Muestra cómo extender BaseAdapter y aplicarlo a un ListView . Después de eso, solo mire la referencia de BaseAdapter e intente entender qué hace cada método (incluidos los heredados) y cuándo / cómo usarlo.

Además, Google es tu amigo :).


Sé que esto ya ha sido respondido ... pero quería dar un ejemplo más completo.

En mi ejemplo, el ListActivity que mostrará nuestro ListView personalizado se llama OptionsActivity , porque en mi proyecto esta Activity mostrará las diferentes opciones que mi usuario puede configurar para controlar mi aplicación. Hay dos tipos de elementos de lista, un tipo de elemento de lista solo tiene un TextView y el segundo tipo de elemento de lista solo tiene un Button . Puede colocar los widgets que desee dentro de cada tipo de elemento de lista, pero mantuve este ejemplo simple.

El método getItemView() verifica qué elementos de la lista deben ser tipo 1 o tipo 2. De acuerdo con mis ints estáticos que definí arriba, los primeros 5 elementos de la lista serán elementos de la lista tipo 1, y los últimos 5 elementos de la lista serán listados tipo de elemento 2. Entonces, si compila y ejecuta esto, tendrá un ListView que tiene cinco elementos que solo contienen un Button y luego cinco elementos que solo contienen un TextView .

A continuación se muestra el código de Activity , el archivo xml de actividad y un archivo xml para cada tipo de elemento de lista.

OpcionesActividad.java:

public class OptionsActivity extends ListActivity { private static final int LIST_ITEM_TYPE_1 = 0; private static final int LIST_ITEM_TYPE_2 = 1; private static final int LIST_ITEM_TYPE_COUNT = 2; private static final int LIST_ITEM_COUNT = 10; // The first five list items will be list item type 1 // and the last five will be list item type 2 private static final int LIST_ITEM_TYPE_1_COUNT = 5; private MyCustomAdapter mAdapter; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); mAdapter = new MyCustomAdapter(); for (int i = 0; i < LIST_ITEM_COUNT; i++) { if (i < LIST_ITEM_TYPE_1_COUNT) mAdapter.addItem("item type 1"); else mAdapter.addItem("item type 2"); } setListAdapter(mAdapter); } private class MyCustomAdapter extends BaseAdapter { private ArrayList<String> mData = new ArrayList<String>(); private LayoutInflater mInflater; public MyCustomAdapter() { mInflater = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE); } public void addItem(final String item) { mData.add(item); notifyDataSetChanged(); } @Override public int getItemViewType(int position) { if(position < LIST_ITEM_TYPE_1_COUNT) return LIST_ITEM_TYPE_1; else return LIST_ITEM_TYPE_2; } @Override public int getViewTypeCount() { return LIST_ITEM_TYPE_COUNT; } @Override public int getCount() { return mData.size(); } @Override public String getItem(int position) { return mData.get(position); } @Override public long getItemId(int position) { return position; } @Override public View getView(int position, View convertView, ViewGroup parent) { ViewHolder holder = null; int type = getItemViewType(position); if (convertView == null) { holder = new ViewHolder(); switch(type) { case LIST_ITEM_TYPE_1: convertView = mInflater.inflate(R.layout.list_item_type1, null); holder.textView = (TextView)convertView.findViewById(R.id.list_item_type1_text_view); break; case LIST_ITEM_TYPE_2: convertView = mInflater.inflate(R.layout.list_item_type2, null); holder.textView = (TextView)convertView.findViewById(R.id.list_item_type2_button); break; } convertView.setTag(holder); } else { holder = (ViewHolder)convertView.getTag(); } holder.textView.setText(mData.get(position)); return convertView; } } public static class ViewHolder { public TextView textView; } }

activity_options.xml:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/container" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <ListView android:id="@+id/optionsList" android:layout_width="match_parent" android:layout_height="wrap_content" > </ListView> </LinearLayout>

list_item_type_1.xml:

<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/list_item_type1_layout" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <TextView android:id="@+id/list_item_type1_text_view" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Text goes here" /> </LinearLayout>

list_item_type2.xml:

<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/list_item_type2_layout" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <Button android:id="@+id/list_item_type2_button" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Button text goes here" /> </LinearLayout>


Un ejemplo más compacto de un adaptador personalizado (usando la matriz de listas como mis datos):

class MyAdapter extends ArrayAdapter<Object> { public ArrayAdapter(Context context, List<MyObject> objectList) { super(context, R.layout.my_list_item, R.id.textViewTitle, objectList.toArray()); } @Override public View getView(int position, View convertView, ViewGroup parent) { View row = super.getView(position, convertView, parent); TextView title = (TextView) row.findViewById(R.id.textViewTitle); ImageView icon = (ImageView) row.findViewById(R.id.imageViewAccessory); MyObject obj = (MyObject) getItem(position); icon.setImageBitmap( ... ); title.setText(obj.name); return row; } }

Y así es como se usa:

List<MyObject> objectList = ... MyAdapter adapter = new MyAdapter(this.getActivity(), objectList); listView.setAdapter(adapter);


Verifique este enlace , de manera muy simple a través de convertView , podemos obtener el diseño de una fila que se mostrará en listview (que es parentView ).

View v = convertView; if (v == null) { LayoutInflater vi; vi = LayoutInflater.from(getContext()); v = vi.inflate(R.layout.itemlistrow, null); }

utilizando la posición, puede obtener los objetos de la List<Item> .

Item p = items.get(position);

después de eso tendremos que establecer los detalles deseados del objeto en los widgets de formulario identificados.

if (p != null) { TextView tt = (TextView) v.findViewById(R.id.id); TextView tt1 = (TextView) v.findViewById(R.id.categoryId); TextView tt3 = (TextView) v.findViewById(R.id.description); if (tt != null) { tt.setText(p.getId()); } if (tt1 != null) { tt1.setText(p.getCategory().getId()); } if (tt3 != null) { tt3.setText(p.getDescription()); } }

luego devolverá la vista construida que se adjuntará a parentView (que es un ListView / GridView ).


BaseAdapter es el mejor adaptador personalizado para listview.

Class MyAdapter extends BaseAdapter{}

y tiene muchas funciones como getCount() , getView() etc.


import android.app.Activity; import android.content.Context; import android.text.Html; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.ImageView; import android.widget.TextView; import org.json.JSONObject; import java.util.ArrayList; public class OurteamAdapter extends BaseAdapter { Context cont; ArrayList<OurteamModel> llist; OurteamAdapter madap; LayoutInflater inflater; JsonHelper Jobj; String Id; JSONObject obj = null; int position = 0; public OurteamAdapter(Context c,ArrayList<OurteamModel> Mi) { this.cont = c; this.llist = Mi; } @Override public int getCount() { // TODO Auto-generated method stub return llist.size(); } @Override public Object getItem(int position) { // TODO Auto-generated method stub return llist.get(position); } @Override public long getItemId(int position) { // TODO Auto-generated method stub return position; } @Override public View getView(final int position, View convertView, ViewGroup parent) { // TODO Auto-generated method stub if(convertView == null) { LayoutInflater in = (LayoutInflater) cont.getSystemService(Activity.LAYOUT_INFLATER_SERVICE); convertView = in.inflate(R.layout.doctorlist, null); } TextView category = (TextView) convertView.findViewById(R.id.button1); TextView title = (TextView) convertView.findViewById(R.id.button2); ImageView i1=(ImageView) convertView.findViewById(R.id.imageView1); category.setText(Html.fromHtml(llist.get(position).getGalleryName())); title.setText(Html.fromHtml(llist.get(position).getGalleryDetail())); if(llist.get(position).getImagesrc()!=null) { i1.setImageBitmap(llist.get(position).getImagesrc()); } else { i1.setImageResource(R.drawable.anandlogo); } return convertView; } }


public class CustomAdapter extends BaseAdapter{ ArrayList<BookPojo> data; Context ctx; int index=0; public CustomAdapter(ArrayList<BookPojo> data, Context ctx) { super(); this.data = data; this.ctx = ctx; } @Override public int getCount() { // TODO Auto-generated method stub return data.size(); } @Override public Object getItem(int position) { // TODO Auto-generated method stub return data.get(position); } @Override public long getItemId(int position) { // TODO Auto-generated method stub return position; } @Override public View getView(int position, View convertview, ViewGroup parent) { // TODO Auto-generated method stub View v=convertview; if(v==null){ LayoutInflater vi=LayoutInflater.from(ctx); v=vi.inflate(R.layout.messgeview,null); } RelativeLayout rlmessage=(RelativeLayout)v.findViewById(R.id.rlmessgeview); TextView tvisdn=(TextView)v.findViewById(R.id.tvisdn); TextView tvtitle=(TextView)v.findViewById(R.id.tvtitle); TextView tvauthor=(TextView)v.findViewById(R.id.tvauthor); TextView tvprice=(TextView)v.findViewById(R.id.tvprice); BookPojo bpj=data.get(position); tvisdn.setText(bpj.isdn+""); tvtitle.setText(bpj.title); tvauthor.setText(bpj.author); tvprice.setText(bpj.price+""); if(index%2==0) { rlmessage.setBackgroundColor(Color.BLUE); } else { rlmessage.setBackgroundColor(Color.YELLOW); } index++; return v; } }


public class ListAdapter extends ArrayAdapter<Item> { private int resourceLayout; private Context mContext; public ListAdapter(Context context, int resource, List<Item> items) { super(context, resource, items); this.resourceLayout = resource; this.mContext = context; } @Override public View getView(int position, View convertView, ViewGroup parent) { View v = convertView; if (v == null) { LayoutInflater vi; vi = LayoutInflater.from(mContext); v = vi.inflate(resourceLayout, null); } Item p = getItem(position); if (p != null) { TextView tt1 = (TextView) v.findViewById(R.id.id); TextView tt2 = (TextView) v.findViewById(R.id.categoryId); TextView tt3 = (TextView) v.findViewById(R.id.description); if (tt1 != null) { tt1.setText(p.getId()); } if (tt2 != null) { tt2.setText(p.getCategory().getId()); } if (tt3 != null) { tt3.setText(p.getDescription()); } } return v; } }

Esta es una clase que había usado para mi proyecto. Necesitas tener una colección de tus artículos que quieras mostrar, en mi caso es <Item> . View getView(int position, View convertView, ViewGroup parent) anular el View getView(int position, View convertView, ViewGroup parent) .

R.layout.itemlistrow define la fila de ListView .

<?xml version="1.0" encoding="utf-8"?> <TableLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_height="wrap_content" android:orientation="vertical" android:layout_width="fill_parent"> <TableRow android:layout_width="fill_parent" android:id="@+id/TableRow01" android:layout_height="wrap_content"> <TextView android:textColor="#FFFFFF" android:id="@+id/id" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="id" android:textStyle="bold" android:gravity="left" android:layout_weight="1" android:typeface="monospace" android:height="40sp" /> </TableRow> <TableRow android:layout_height="wrap_content" android:layout_width="fill_parent"> <TextView android:textColor="#FFFFFF" android:id="@+id/categoryId" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="categoryId" android:layout_weight="1" android:height="20sp" /> <TextView android:layout_height="wrap_content" android:layout_width="fill_parent" android:layout_weight="1" android:textColor="#FFFFFF" android:gravity="right" android:id="@+id/description" android:text="description" android:height="20sp" /> </TableRow> </TableLayout>

En el MainActivity definir ListView como este,

ListView yourListView = (ListView) findViewById(R.id.itemListView); // get data from the table by the ListAdapter ListAdapter customAdapter = new ListAdapter(this, R.layout.itemlistrow, List<yourItem>); yourListView .setAdapter(customAdapter);