2015-09-10 8 views
6

Qual è la differenza tra getView() e getActivity()?Qual è la differenza tra getView() e getActivity()?

Ho usato entrambi i metodi, ma non capisco la differenza di base, anche la metodologia di utilizzo sono anche lo stesso in Android:

ListView deliverItemList = (ListView) getView().findViewById(R.id.load_item_list); 
ListView deliverItemList = (ListView) getActivity().findViewById(R.id.load_item_list); 

ho assunto che getView() possono produrre NullPointerException, condividere le tue conoscenze con me e che il metodo è raccomandato?

risposta

7

getActivity() restituisce il Activity che ospitano il Fragment, mentre getView() restituisce la vista che si gonfia e restituito da onCreateView. Quest'ultimo restituisce un valore != null solo dopo onCreateView rendimenti

+0

così, devo usare getActivity() o GetView() in Frammento? – Abe

+1

99% del tempo di getView. Oppure, se possibile, sovrascrivi 'onViewCreated' e usa il precedente parametro VIew, per cercare le tue viste – Blackbelt

+0

nel mio caso ho override suActivityCreated – Abe

6

Da documenti android:

getActivity() restituisce l'Activity questo frammento è attualmente associato, e GetView() restituisce la visualizzazione principale per la frammento del layout (quello restituito da onCreateView (LayoutInflater, ViewGroup, Bundle)), se fornito.

Quindi, nel tuo caso, dal seguente riga di codice:

getView().findViewById(R.id.load_item_list); 

si sta cercando per la vista nel frammento, ma utilizzando la seguente riga di codice:

getActivity().findViewById(R.id.load_item_list); 

stai cercando la visualizzazione nella tua attività che ospita il tuo frammento.

La tua domanda su quale utilizzare, dipende. Se si sta cercando di gonfiare frammento, è necessario gonfiare il xml in onCreateView, e l'utilizzo di questo punto di vista gonfiato si cerca vostri punti di vista come questo:

public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
    View v = inflater.inflate(R.layout.your_layout, container, false); 
    ListView lv = (ListView)v.findViewById(R.id.view_id); 
} 
+0

L'invocazione del metodo 'getView(). FindViewById (R.id.load_item_list)' può produrre 'java.lang.NullPointerException – Abe

+0

Come posso evitare l'eccezione di nullpoint? – Abe

+1

sì, se chiami getView() in onCreateView(), restituirà null. Puoi chiamare getView() nel metodo onViewCreated(), oppure puoi fare quanto segue nella tua funzione onCreateView(): Visualizza v = inflater.inflate (your_fragment_layout_id, container, false); ListView lv = v.findViewById (R.id.load_item_list); – yrazlik

Problemi correlati