Vista de lista dinámica en la aplicación de Android

¿Hay algún ejemplo de trabajo que demuestre cómo agregar filas adicionales en ListView de forma dinámica? Por ejemplo:

  1. estás extrayendo feeds RSS de diferentes dominios
  2. a continuación, muestra los primeros 10 elementos en el ListView (mientras tiene otros hilos que se ejecutan en segundo plano, continúe extrayendo feeds)
  3. se desplaza y llega al final de la lista y hace clic en un botón para ver más elementos
  4. el ListView luego se agregará con 10 elementos adicionales, lo que hace que 20 artículos ahora estén en total.

¿Algún consejo sobre cómo lograr esto?

Nicholas

Para agregar nuevo elemento a su lista dinámicamente, debe obtener la clase de adaptador de su ListActivity y simplemente agregar nuevos elementos. Cuando agrega elementos directamente al adaptador, notifyDataSetChanged se llama automáticamente y la vista se actualiza automáticamente.

También puede proporcionar su propio adaptador (extendiendo ArrayAdapter) y anular el constructor que toma el parámetro List. Puede usar esta lista tal como usa el adaptador, pero en este caso debe llamar a adapter.notifyDataSetChanged () usted mismo para actualizar la vista.
Por favor, eche un vistazo al ejemplo a continuación:

public class CustomList extends ListActivity { private LayoutInflater mInflater; private Vector data; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); mInflater = (LayoutInflater) getSystemService(Activity.LAYOUT_INFLATER_SERVICE); data = new Vector(); RowData rd = new RowData("item1", "description1"); data.add(rd); rd = new RowData("item2", "description2"); data.add(rd); rd = new RowData("item2", "description3"); data.add(rd); CustomAdapter adapter = new CustomAdapter(this, R.layout.custom_row,R.id.item, data); setListAdapter(adapter); getListView().setTextFilterEnabled(true); } public void onListItemClick(ListView parent, View v, int position, long id) { CustomAdapter adapter = (CustomAdapter) parent.getAdapter(); RowData row = adapter.getItem(position); AlertDialog.Builder builder = new AlertDialog.Builder(this); builder.setTitle(row.mItem); builder.setMessage(row.mDescription + " -> " + position ); builder.setPositiveButton("ok", null); builder.show(); } /** * Data type used for custom adapter. Single item of the adapter. */ private class RowData { protected String mItem; protected String mDescription; RowData(String item, String description){ mItem = item; mDescription = description; } @Override public String toString() { return mItem + " " + mDescription; } } private class CustomAdapter extends ArrayAdapter { public CustomAdapter(Context context, int resource, int textViewResourceId, List objects) { super(context, resource, textViewResourceId, objects); } @Override public View getView(int position, View convertView, ViewGroup parent) { ViewHolder holder = null; //widgets displayed by each item in your list TextView item = null; TextView description = null; //data from your adapter RowData rowData= getItem(position); //we want to reuse already constructed row views... if(null == convertView){ convertView = mInflater.inflate(R.layout.custom_row, null); holder = new ViewHolder(convertView); convertView.setTag(holder); } // holder = (ViewHolder) convertView.getTag(); item = holder.getItem(); item.setText(rowData.mItem); description = holder.getDescription(); description.setText(rowData.mDescription); return convertView; } } /** * Wrapper for row data. * */ private class ViewHolder { private View mRow; private TextView description = null; private TextView item = null; public ViewHolder(View row) { mRow = row; } public TextView getDescription() { if(null == description){ description = (TextView) mRow.findViewById(R.id.description); } return description; } public TextView getItem() { if(null == item){ item = (TextView) mRow.findViewById(R.id.item); } return item; } } 

}

Puede extender el ejemplo anterior y agregar el botón “más”, que solo agrega elementos nuevos a su adaptador (o vector).
¡Saludos!