Ответ 1
Существует ListFragment: http://developer.android.com/reference/android/app/ListFragment.html
Для MapActivity, к сожалению, вам нужно будет продолжать использовать это; для него нет API-интерфейсов фрагментов.
Я конвертирую существующее приложение в API Фрагментов, используя библиотеку совместимости. Я прочитал, что вы должны обновлять классы, которые расширяют действие, чтобы теперь использовать FragmentActivity. Это нормально для большинства случаев, но как насчет классов, которые расширяют ListActivity или MapActivity? Каков предпочтительный способ справиться с этим? Я надеялся, что есть ListFragmentActivity или что-то в этом роде, но я не вижу этого.
Существует ListFragment: http://developer.android.com/reference/android/app/ListFragment.html
Для MapActivity, к сожалению, вам нужно будет продолжать использовать это; для него нет API-интерфейсов фрагментов.
Это то, что я делаю при преобразовании 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, если она еще не была в этом пункте
По крайней мере, для ListActivity Вы можете изменить его на FragmentActivity (все еще реализуя OnItemCLickListener) и заменить:
lv = getListView() для lv = (ListView) findViewById (R.id.your_list_view_id)
и
setListAdapter (favAdapter) в lv.setAdapter(адаптер)
Можно преобразовать 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);