Я конвертирую существующее приложение в 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);