В одном из проектов столкнулся с тем, что в приложении нужно было отображать списки результатов для различных запросов (поиск по словам, датам, тегам и т.п.). Так как списки повторялись в разных Activity, самым очевидным решением было использовать фрагменты, а конкретно создать свой класс ListFragment и повторно использовать его в проекте.

ListFragment как раз предназначен для отображения различных списков и примечателен тем, что имеет свои поля и методы для работы со списком, а также XML-разметку с минимальным набором представлений. Благодаря всему этому, мы можем даже не создавать свою XML-разметку для фрагмента, используя стандартную.
Прежде, чем начать работать с ListFragment, давайте немного изучим, что же находится внутри?
По умолчанию используется разметка из ~\sdk\platforms\android-XX\data\res\layout\list-content.xml
У некоторых представлений этой разметки имеются идентификаторы, благодаря которым мы можем кастомизировать родительский контейнер, список и текст пустого списка.
Если пробежаться по исходникам класса ListFragment, мы увидим:
Итак, создадим наш класс:
И включим его в разметку нашего Activity (либо можно установить фрагмент программно)
Запускаем приложение, переходим к нашему Activity и сразу же видим анимацию загрузки:

Теперь, для того, чтобы скрыть анимацию и отобразить список, нам достаточно установить адаптер вызвав метод setAdapter(ListAdapter adapter). В этом проекте я использовал Loader в Activity и OttoBus событие, но вариантов передать объект списка во фрагмент предостаточно, поэтому прошу не обращать внимание на сам метод.
Сразу после установки адаптера анимация исчезнет и мы увидим:

А если наш список вдруг окажется пустым, то получим другой экран:

Для установки своего empty-текста используется метод:
Также в классе ListFragment имеется метод обработки нажатий списка, который мы можем переопределить
Вы можете не использовать стандартную разметку, и задать свою, но не забудьте указать правильные идентификаторы вашим представлениям.
Итого. ListFragment имеет свои представления и логику работы.
Надеюсь эта статья позволит вам принять оценить, достаточно ли вам встроенной реализации или же нужно писать свою.
P.S. Лично мне понравилась простота и скорость внедрения в проект, где я смог успешно использовать один класс фрагмента сразу в 4х различных Activity.
Плюсы:
* Не обязательно создавать XML-разметку.
* Нет необходимости объявлять представления в вашем классе.
* Не нужно реализовывать логику показа/скрытия анимации, списка и empty-текста.
* Не нужна установка «слушателя»
* Меньше кода.
Минусы:
* Нужно изучить методы класса ListFragment и как все работает.
* Нельзя изменить встроенную анимацию даже через собственную разметку.
* Нельзя переопределить логику скрытия/показа анимации, списка и empty-текста.
P.S. Присоединяйтесь к чату русскоязычных Android разработчиков.

ListFragment как раз предназначен для отображения различных списков и примечателен тем, что имеет свои поля и методы для работы со списком, а также XML-разметку с минимальным набором представлений. Благодаря всему этому, мы можем даже не создавать свою XML-разметку для фрагмента, используя стандартную.
Прежде, чем начать работать с ListFragment, давайте немного изучим, что же находится внутри?
По умолчанию используется разметка из ~\sdk\platforms\android-XX\data\res\layout\list-content.xml
У некоторых представлений этой разметки имеются идентификаторы, благодаря которым мы можем кастомизировать родительский контейнер, список и текст пустого списка.
Если пробежаться по исходникам класса ListFragment, мы увидим:
View mListContainer; // родительский контейнер (идентификатор R.id.listContainer)
final private AdapterView.OnItemClickListener mOnClickListener // "слушатель" клика на элемент списка
ListAdapter mAdapter; // адаптер списка
ListView mList; // представление списка (идентификатор android.R.id.list)
TextView mEmptyView; // текстовое представление для случая пустого списка, будем называть его empty-текст (идентификатор android.R.id.empty)
View mProgressContainer; // представление для анимации загрузки
Итак, создадим наш класс:
import android.app.ListFragment;
public class MyListFragment extends ListFragment{
}
И включим его в разметку нашего Activity (либо можно установить фрагмент программно)
<fragment
android:name="**.*******.********.MyListFragment"
android:layout_width="match_parent"
android:layout_height="match_parent">
</fragment>
Запускаем приложение, переходим к нашему Activity и сразу же видим анимацию загрузки:

Теперь, для того, чтобы скрыть анимацию и отобразить список, нам достаточно установить адаптер вызвав метод setAdapter(ListAdapter adapter). В этом проекте я использовал Loader в Activity и OttoBus событие, но вариантов передать объект списка во фрагмент предостаточно, поэтому прошу не обращать внимание на сам метод.
@Subscribe
public void onMyEvent(MyEvent loaderEvent) throws InterruptedException {
String[] listItems = {"item 1", "item 2", "item 3","item 4"}; // пример списка
Thread.sleep(2000); // имитация времени загрузки
ArrayAdapter mArrayAdapter = new ArrayAdapter(getActivity(), android.R.layout.simple_list_item_1, listItems); // адаптер списка
setListAdapter(mArrayAdapter); // установка адаптера
}
Сразу после установки адаптера анимация исчезнет и мы увидим:

А если наш список вдруг окажется пустым, то получим другой экран:

Для установки своего empty-текста используется метод:
setEmptyText(getResources().getString(R.string.error));
Также в классе ListFragment имеется метод обработки нажатий списка, который мы можем переопределить
@Override
public void onListItemClick(ListView l, View v, int position, long id) {
// ваш ход господа
}
Вы можете не использовать стандартную разметку, и задать свою, но не забудьте указать правильные идентификаторы вашим представлениям.
Итого. ListFragment имеет свои представления и логику работы.
Надеюсь эта статья позволит вам принять оценить, достаточно ли вам встроенной реализации или же нужно писать свою.
P.S. Лично мне понравилась простота и скорость внедрения в проект, где я смог успешно использовать один класс фрагмента сразу в 4х различных Activity.
Плюсы:
* Не обязательно создавать XML-разметку.
* Нет необходимости объявлять представления в вашем классе.
* Не нужно реализовывать логику показа/скрытия анимации, списка и empty-текста.
* Не нужна установка «слушателя»
* Меньше кода.
Минусы:
* Нужно изучить методы класса ListFragment и как все работает.
* Нельзя изменить встроенную анимацию даже через собственную разметку.
* Нельзя переопределить логику скрытия/показа анимации, списка и empty-текста.
P.S. Присоединяйтесь к чату русскоязычных Android разработчиков.