Причина, по которой это работает, заключается в том, что onCreateView в ListFragment создает для вас простой ListView.
Вот исходный код Android для ListFragment:
/**
* Provide default implementation to return a simple list view. Subclasses
* can override to replace with their own layout. If doing so, the
* returned view hierarchy <em>must</em> have a ListView whose id
* is {@link android.R.id#list android.R.id.list} and can optionally
* have a sibling view id {@link android.R.id#empty android.R.id.empty}
* that is to be shown when the list is empty.
*
* <p>If you are overriding this method with your own custom content,
* consider including the standard layout {@link android.R.layout#list_content}
* in your layout file, so that you continue to retain all of the standard
* behavior of ListFragment. In particular, this is currently the only
* way to have the built-in indeterminant progress state be shown.
*/
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
return inflater.inflate(com.android.internal.R.layout.list_content,
container, false);
}
Исходный код дляListFragment
Файл list_content.xml содержит следующий ListView:
<ListView android:id="@android:id/list"
android:layout_width="match_parent"
android:layout_height="match_parent" />
Если, однако, ваш код должен был переопределить onCreateView в ListFragment для предоставления пользовательского макета, то ваш макет будетнеобходимо явно объявить ListView.
Примечание. Вероятно, стоит упомянуть, что ListView в настоящее время классифицируется как «устаревшее» представление в Android Studio.Большинство новых приложений в настоящее время должны использовать RecyclerView в большинстве случаев.
Следующая команда Android Studio создаст для вас полностью рабочий список примеров RecyclerView:
File -> New -> Fragment (List)
[В настоящее время он создает список, полученный из Fragment, а не ListFragment]