Я конвертирую существующее приложение в API Фрагментов, используя библиотеку совместимости. Я прочитал, что вы должны обновлять классы, которые расширяют действие, чтобы теперь использовать FragmentActivity. Это нормально для большинства случаев, но как насчет классов, которые расширяют ListActivity или MapActivity? Каков предпочтительный способ справиться с этим? Я надеялся, что есть ListFragmentActivity или что-то в этом роде, но я не вижу этого.
Что делать с ListActivity/MapActivity при преобразовании в Фрагменты с использованием библиотеки совместимости?
Ответ 1
Существует ListFragment: http://developer.android.com/reference/android/app/ListFragment.html
Для MapActivity, к сожалению, вам нужно будет продолжать использовать это; для него нет API-интерфейсов фрагментов.
Ответ 2
Это то, что я делаю при преобразовании ListActivity в API фрагментов:
-
Замените
lv = getListView();наlv = (ListView) findViewById(android.R.id.list); -
Замените
setListAdapter(adapter);наlv.setAdapter(adapter); -
Если вы переопределили
onListItemClick(), замените его наlv.setOnItemClickListener(new ListView.OnItemClickListener() {... -
Вам нужно будет установить пустой вид (который показывает, когда нет результатов) вручную:
lv.setEmptyView(findViewById(android.R.id.empty));Если я использую CursorLoader, я обычно помещаю это в onLoadFinished():
// if there are no results if (data.getCount() == 0) { // let the user know lv.setEmptyView(findViewById(android.R.id.empty)); } else { // otherwise clear it, so it won't flash in between cursor loads lv.setEmptyView(null); } -
Говоря о загрузчиках курсора, я также буду преобразовывать активность для использования CursorLoader, если она еще не была в этом пункте
Ответ 3
По крайней мере, для ListActivity Вы можете изменить его на FragmentActivity (все еще реализуя OnItemCLickListener) и заменить:
lv = getListView() для lv = (ListView) findViewById (R.id.your_list_view_id)
и
setListAdapter (favAdapter) в lv.setAdapter(адаптер)
Ответ 4
Можно преобразовать ListActivity в FragmentActivity.
- Расширьте
FragmentActivityвместоListActivity - Создайте
res/layout/your_activity.xmlс пустымListViewсandroid:id="@+id/your_activity_list_view" - В
onCreateвашей активностиsetContentView(R.layout.your_activity); - Также измените
onCreateвашей активности, чтобы явно получитьListView, который вы только что надули.
.
ListView lv = (ListView) findViewById(R.id.your_activity_list_view);
lv.setAdapter(adapter);
lv.setOnItemClickListener(this);