Sto creando un elenco di schede con diversi frammenti. Ho notato che, nell'attività principale, ho utilizzato setContentView
per ottenere il layout xml e utilizzare findViewById
per ottenere la configurazione dell'elemento dell'interfaccia utente corrispondente.Differenza tra setContentView e LayoutInflater
setContentView(R.layout.fragment_tabs);
mTabHost = (TabHost)findViewById(android.R.id.tabhost);
mTabHost.setup();
mTabManager = new TabManager(this, mTabHost, android.R.id.tabcontent);
Tuttavia, nella classe frammento diverso, devo utilizzare il gonfiatore invece.
View v = inflater.inflate(R.layout.webview, container, false);
WebView myBrowser=(WebView)v.findViewById(R.id.mybrowser);
E entrambe le funzioni sono utilizzate per ottenere il layout xml per creare un oggetto, perché c'è una differenza? Il primo viene utilizzato durante lo onCreate
e il secondo durante lo onCreateView
? In che situazione dovrei scegliere uno di loro?
Grazie per la risposta, inoltre, è necessario ottenere il file xml e creare un oggetto per esso prima di findViewById? Dal momento che ho trovato qualche esempio nel documento ufficiale non lo è. per esempio. EditText editText = (EditText) findViewById (R.id.email_address); – user782104
Non sono sicuro di aver capito completamente la domanda, quindi se la mia risposta non ha senso, sentitevi liberi di chiedere nuovamente. Attività e viste hanno entrambi un metodo chiamato findViewById(). La versione dell'attività cercherà una vista con l'id specificato all'interno della sua vista del contenuto (quindi, internamente, chiamerà contentView.findViewById()). Ciò significa che ContentView deve essere impostato prima che diventi utilizzabile. Come "setContentView", i frammenti non hanno un metodo per "findViewById" (che ha senso, perché non c'è vista del contenuto). Basta usare getView(). FindViewById() invece per lo stesso comportamento. –
Non hai menzionato che si può usare anche 'LayoutInflater.inflate' in un'attività, in alternativa a' setContentView'. –