Czytam ListFragment kod źródłowego i widzę ten realizacji:onDestroyView ustawić Null praktyki aktywności za onDestroy/fragment za
ListAdapter mAdapter;
ListView mList;
View mEmptyView;
TextView mStandardEmptyView;
View mProgressContainer;
View mListContainer;
CharSequence mEmptyText;
boolean mListShown;
/**
* Detach from list view.
*/
@Override
public void onDestroyView() {
mHandler.removeCallbacks(mRequestFocus);
mList = null;
mListShown = false;
mEmptyView = mProgressContainer = mListContainer = null;
mStandardEmptyView = null;
super.onDestroyView();
}
w tej funkcji, programiści Google ustawić Null wszystkim widok pola, które deklarowanych w ListFragment i usuń oddzwanianie "mRequestFocus".
W ListActivity kod źródłowy. Programiści Google wdrożone jak poniżej:
protected ListAdapter mAdapter;
protected ListView mList;
private Handler mHandler = new Handler();
@Override
protected void onDestroy() {
mHandler.removeCallbacks(mRequestFocus);
super.onDestroy();
}
nie widzę programiści Google ustawić Null do mList na onDestroy z ListActivity jak zrobili dla klasy ListFragment.
Moje pytanie brzmi:
Dlaczego programiści Google didnot ustawić Null do mList w onDestroy z ListActivity? Jakieś powody?
Czy musimy ustawić wartość Null dla wszystkich pól widoku w działaniu onDestroy i onDestroyView działania?
3. Wszelkie praktyki SET NULL w tych dwóch funkcji: onDestroy Działania związane i fragment za onDestroyView?
Dziękujemy za pomysły!
Bardzo dobrze wyjaśnij. Mam pytanie. Dlaczego deweloperzy Google nie ustawili wartości Null na mAdapter w onDestroyView na liście ListFragment. Ustawienie pola Null na inne niż ui, takie jak mAdapter, jest niepotrzebne? –
To dobre pytanie. Zazwyczaj nie ma to znaczenia, ale adaptery zwykle zawierają również odniesienie do kontekstu działania. Przypuszczam, że jest to zgodne z umową metody, która jest "onDestroyVIEW", więc niszczą tylko odniesienia do widoku. Myślę, że byłoby to nieoczekiwane zachowanie, gdybyś nazwał 'setListAdapter()', a następnie nazwałbyś 'getListAdapter()' i jest niewytłumaczalnie 'null'. Ponieważ adapter nie jest drogim obiektem do trzymania (z wyjątkiem przypadku setRetainInstance(), gdy może przeciekać działanie), nie ma wiele korzyści z jego zwolnieniem. – kcoppock
Zastanawiam się więc, czy jest to lepsze podejście do rozpinania w oncreateview tuż przed związaniem? – j2emanue