Что делать с ListActivity/MapActivity при преобразовании в Фрагменты с использованием библиотеки совместимости?

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

Ответы

Ответ 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);