Динамический список в приложении Android

Есть ли рабочий пример, который демонстрирует, как добавлять дополнительные строки в ListView динамически? Например:

  1. вы потягиваете RSS-каналы из разных доменов
  2. вы затем показываете первые 10 элементов в ListView (в то время как у вас есть другие streamи, выполняемые в фоновом режиме, продолжайте потянуть каналы)
  3. вы прокрутите и дойдете до нижней части списка и нажмите кнопку, чтобы просмотреть другие объекты
  4. тогда ListView будет добавлен с дополнительными 10 элементами, что составляет всего 20 элементов.

Любой совет, как это сделать?

Николас

Чтобы динамически добавлять новый элемент в свой список, вам необходимо получить class адаптера из списка ListActivity и просто добавить новые элементы. Когда вы добавляете элементы непосредственно в адаптер, notifyDataSetChanged вызывается автоматически для вас – и сам просмотр обновляется.

Вы также можете предоставить свой собственный адаптер (расширение ArrayAdapter) и переопределить конструктор с параметром List. Вы можете использовать этот список так же, как вы используете адаптер, но в этом случае вам нужно вызвать adapter.notifyDataSetChanged () самостоятельно – для обновления представления.
Пожалуйста, взгляните на приведенный ниже пример:

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

}

Вы можете расширить пример выше и добавить кнопку «больше», которая просто добавляет новые элементы в ваш адаптер (или вектор).
С уважением!

  • Ошибка: выполнение выполнено для задачи «: app: packageRelease». > Невозможно вычислить hash из /../AndroidStudioProjects/../classes.jar
  • Завершение программы Java
  • Как проверить, не является ли текущий stream не основным streamом
  • Информация о _JAVA_OPTIONS
  • Как запросить разрешение на размещение во время выполнения на Android 6
  • Сортировка коллекций (список , метод сравнения )
  • Разделить строку на отдельные слова Java
  • getSearchForm возвращает значение null при использовании UserSearch в XMPP с помощью aSmack
  • Почему файл Java должен иметь то же имя, что и его открытый class?
  • Сортировка ArrayList на основе поля объекта
  • Как использовать UTF-8 в свойствах ресурсов с помощью ResourceBundle
  • Давайте будем гением компьютера.