Dynamisches ListView in der Android App

Gibt es ein funktionierendes Beispiel, das zeigt, wie Sie zusätzliche Zeilen in ListView dynamisch anhängen? Beispielsweise:

  1. Sie ziehen RSS-Feeds aus verschiedenen Domänen
  2. Sie zeigen dann die ersten 10 Elemente in der ListView an (während Sie andere Threads ausführen, die im Hintergrund ausgeführt werden, ziehen Sie weiterhin Feeds)
  3. Sie scrollen und erreichen das Ende der Liste und klicken auf eine Schaltfläche, um weitere Elemente anzuzeigen
  4. Der ListView wird dann mit weiteren 10 Items versehen, was insgesamt 20 Items ergibt.

Irgendein Rat, wie man das erreicht?

Nikolaus

   

Um ein neues Element dynamisch zu Ihrer Liste hinzuzufügen, müssen Sie eine Adapterklasse von Ihrer ListActivity beziehen und einfach neue Elemente hinzufügen. Wenn Sie Elemente direkt zum Adapter hinzufügen, wird notifyDataSetChanged automatisch für Sie aufgerufen – und die Ansicht aktualisiert sich selbst.

Sie können auch einen eigenen Adapter bereitstellen (ArrayAdapter erweitern) und den Konstruktor überschreiben, der List-Parameter verwendet. Sie können diese Liste genauso verwenden wie den Adapter, aber in diesem Fall müssen Sie adapter.notifyDataSetChanged () selbst aufrufen, um die Ansicht zu aktualisieren.
Bitte sehen Sie sich das folgende Beispiel an:

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

}

Sie können das obige Beispiel erweitern und die Schaltfläche “more” hinzufügen, die Ihrem Adapter (oder Vektor) einfach neue Elemente hinzufügt.
Grüße!