Что делать с ListActivity / MapActivity при преобразовании во фрагменты с использованием библиотеки совместимости? - PullRequest
15 голосов
/ 27 июня 2011

Я конвертирую существующее приложение в API Фрагментов, используя библиотеку совместимости. Я читал, что вы должны обновить классы, расширяющие Activity, чтобы теперь использовать FragmentActivity. Это хорошо для большинства случаев, но как насчет классов, которые расширяют ListActivity или MapActivity? Каков предпочтительный способ справиться с этим? Я надеялся, что существует ListFragmentActivity или что-то в этом роде, но я его не вижу.

Ответы [ 4 ]

12 голосов
/ 02 августа 2012

Это то, что я делаю при преобразовании ListActivity в API фрагментов:

  1. Заменить lv = getListView(); на lv = (ListView) findViewById(android.R.id.list);

  2. Заменить setListAdapter(adapter); на lv.setAdapter(adapter);

  3. Если вы переопределили onListItemClick(), замените его на lv.setOnItemClickListener(new ListView.OnItemClickListener() {...

  4. Вам нужно будет установить пустое представление (которое будет отображаться при отсутствии результатов) вручную: 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);
    }
    
  5. Говоря о загрузчиках курсора , я также преобразую упражнение в использование CursorLoader, если оно еще не достигнуто к этому моменту

8 голосов
/ 21 сентября 2011

По крайней мере для ListActivity. Вы можете изменить его на FragmentActivity (все еще реализуя OnItemCLickListener) и заменить:

lv = getListView () - lv = (ListView) findViewById (R.id.your_list_view_id)

и

setListAdapter (favAdapter) - lv.setAdapter (адаптер)

5 голосов
/ 27 июня 2011

Существует ListFragment: http://developer.android.com/reference/android/app/ListFragment.html

Для MapActivity, к сожалению, вам нужно будет продолжать использовать это;для него нет API фрагментов.

0 голосов
/ 13 августа 2013

Можно преобразовать ListActivity в FragmentActivity.

  1. Расширить FragmentActivity вместо ListActivity
  2. Создать res/layout/your_activity.xml с пустым ListView с android:id="@+id/your_activity_list_view"
  3. В onCreate вашей активности, setContentView(R.layout.your_activity);
  4. Также измените onCreate вашей активности, чтобы явно получить ListView, которую вы только что надули

.

ListView lv = (ListView) findViewById(R.id.your_activity_list_view);
lv.setAdapter(adapter);
lv.setOnItemClickListener(this);
...