Konwertuję istniejącą aplikację na fragment API przy użyciu biblioteki zgodności. Czytałem, że powinieneś zaktualizować klasy, które rozszerzają aktywność, aby teraz używać FragmentActivity. W większości przypadków jest to w porządku, ale co z klasami, które rozszerzają ListActivity lub MapActivity? Jaki jest preferowany sposób obsługi tego? Miałem nadzieję, że istnieje ListFragmentActivity lub coś podobnego, ale ja go nie widzę.Co zrobić z ListActivity/MapActivity podczas konwersji do fragmentów przy użyciu biblioteki zgodności?
Odpowiedz
jest ListFragment: http://developer.android.com/reference/android/app/ListFragment.html
Dla MapActivity niestety trzeba będzie nadal korzystać z tego; nie ma w tym celu API Fragmentu.
Przynajmniej dla ListActivity Można go zmienić na FragmentActivity (nadal wdrażaniu OnItemCLickListener) i wymienić:
LV = getListView(), aby LV = (ListView) findViewById (R.id.your_list_view_id)
i
setListAdapter (favAdapter) do lv.setAdapter (adapter)
Jeśli identyfikator twojego ListView to '@ android: id/list', możesz to zrobić: 'ListView lv = (ListView) findViewById (android.R.id.list);'. Będziesz także chcieć zamienić 'onListItemClick()' na 'lv.setOnItemClickListener (new ListView.OnItemClickListener() {...' – bmaupin
Skomentowałem to również w odpowiedzi @bmaupin, ale czy możemy po prostu tworzyć metody "getListView() "który zwraca" (ListView) findViewById (R.id.your_list_view_id) "i" setListAdapter (adapter) ", który robi" getListView() .setAdapter (adapter) ", aby zająć się tymi rzeczami, czy też nie zadziałałoby? – ankushg
@Akush, który też by działał.Będziesz przeszukiwał hierarchię widoków za każdym razem, gdy wywołasz metodę getListView(), która jest marginalnie mniej wydajna –
to co mam zrobić, gdy przekształcenie ListActivity API fragmenty:
Wymień
lv = getListView();
zlv = (ListView) findViewById(android.R.id.list);
Wymień
setListAdapter(adapter);
zlv.setAdapter(adapter);
Jeśli nadpisane
onListItemClick()
, wymień golv.setOnItemClickListener(new ListView.OnItemClickListener() {...
Musisz ustawić pusty pogląd (który pokazuje gdy nie ma wyników) ręcznie:
lv.setEmptyView(findViewById(android.R.id.empty));
Jeśli używam CursorLoader, ja normalnie umieścić to w 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); }
Mówiąc o cursor loaders, będę również konwertować aktywność do korzystania CursorLoader jeśli nie jest już w tym momencie
Czy wystarczy dodać nową metodę getListView() do FragmentActivity, która zwróciła ListView a następnie dodać inną metodę setListAdapter (adapter), która nazwał setAdapter (adapter) dla tego działania? – ankushg
Twoje rozwiązanie działało idealnie, thx 4 udostępnij je! – vinidog
@Ankush, które też by działały. ng hierarchii widoku przy każdym wywołaniu funkcji getListView(), która jest marginalnie mniej wydajna. –
Możliwe jest przekonwertowanie ListActivity
na FragmentActivity
.
- Extend
FragmentActivity
zamiastListActivity
- Tworzenie
res/layout/your_activity.xml
z pustymListView
zandroid:id="@+id/your_activity_list_view"
- W
onCreate
swojej działalnościsetContentView(R.layout.your_activity);
- zmienić Również
onCreate
swojej działalności jawnie pobraćListView
po prostu napompowane:
.
ListView lv = (ListView) findViewById(R.id.your_activity_list_view);
lv.setAdapter(adapter);
lv.setOnItemClickListener(this);
Dzięki, ale ListFragment nie jest narzędziem FragmentActivity, więc mam problemy z moją strukturą dziedziczenia, która oczekuje od FragmentActivity. Im więcej pracuję nad tym, tym bardziej wydaje się, że będzie to wymagać całkowitego przepisania, a nie tylko aktualizacji typów klas i drobnych poprawek, takich jak Google. – CACuzcatlan
@CACuzcatlan: Możesz podać link, w którym "Google" "twierdzi", że wszystko, czego potrzebujesz, to "tylko aktualizowanie typów zajęć i drobnych poprawek". Mając to na uwadze, konwertowanie "ListActivity" na "ListFragment" jest dość proste, prostsze niż większość migracji migracji fragmentów, IMHO. – CommonsWare
Przepraszam, przesadziłem. Powinienem powiedzieć, że to było wrażenie, które dostałem. – CACuzcatlan