Я конвертирую существующее приложение в Fragments API, используя библиотеку совместимости. Я читал, что вы должны обновить классы, которые расширяют Activity, чтобы теперь использовать FragmentActivity. В большинстве случаев это нормально, но как насчет классов, расширяющих ListActivity или MapActivity? Каков предпочтительный способ справиться с этим? Я надеялся, что существует ListFragmentActivity или что-то в этом роде, но я его не вижу.
Что делать с ListActivity/MapActivity при преобразовании во фрагменты с помощью библиотеки совместимости?
Ответы (4)
Существует ListFragment: http://developer.android.com/reference/android/app/ListFragment.html
Для MapActivity, к сожалению, вам придется продолжать использовать это; для него нет Fragment API.
ListActivity
в ListFragment
довольно просто, проще, чем большинство миграций активности-фрагментов, ИМХО.
- person CommonsWare; 28.06.2011
Вот что я делаю при преобразовании 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() to lv=(ListView) findViewById(R.id.your_list_view_id)
а также
setListAdapter(favAdapter) to lv.setAdapter(адаптер)
@android:id/list
, вы можете сделать это: ListView lv = (ListView) findViewById(android.R.id.list);
. Вы также можете заменить onListItemClick()
на lv.setOnItemClickListener(new ListView.OnItemClickListener() {...
- person bmaupin; 16.01.2012
Можно преобразовать 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);