2012-04-15 12 views
61

Ho letto la documentazione su Fragments nella Guida per sviluppatori Android e ho visto che a volte specificano la classe per creare un'istanza con l'attributo tag Fragment android: nome e qualche volta usano il classe: attributo:Layout attività: classe frammento: vs android: attributi nome

<fragment 
    android:name="com.example.news.ArticleReaderFragment" 
    android:id="@+id/viewer" 
    android:layout_weight="2" 
    android:layout_width="0dp" 
    android:layout_height="match_parent" /> 

<fragment 
    class="com.example.android.apis.app.FragmentLayout$TitlesFragment" 
    android:id="@+id/titles" 
    android:layout_weight="1" 
    android:layout_width="0px" 
    android:layout_height="match_parent" /> 

sono Android: nome e classe: intercambiabili? Se utilizzo la funzione di completamento automatico in Eclipse, entrambi mostrano lo stesso suggerimento di documentazione (vale a dire che l'attributo fornisce il nome della classe da istanziare). Forse è necessario utilizzare il secondo quando la classe da istanziare ha un nome diverso dal nome del file java, come TitlesFragment che si trova nel file FragmentLayout.java? Oppure posso usare la sintassi package.fileDOTjava $ Class anche con l'attributo android: nome?

Mi piacerebbe avere una documentazione per i tag XML e gli attributi come per le classi Java di Android (ne ho parlato in un altro question).

risposta

23

Android: nome e classe: intercambiabile?

Presumibilmente sì. Ho usato solo lo class, e sembra che sia la maggior parte degli esempi di Google che uso, ma vedo dove usano lo android:name in alcuni esempi. Sfortunatamente, non esiste una documentazione formale e completa per <fragment>.

+0

Mi piacerebbe che ci fosse la documentazione. Dato che 'class' non ha uno spazio dei nomi, sono curioso di sapere se quell'attributo non è stato solo usato mentre i frammenti venivano sviluppati, ma sono stati lasciati perché non possono rompere la compatibilità ora. Per ragioni di coerenza, 'android: name' sembra sempre leggermente preferibile e come sottolineato da user1550716, sembra che siano intercambiabili. – spaaarky21

+0

@ spaaarky21: Sì, sono passato a 'android: name' dappertutto. – CommonsWare

+1

credenza aggiuntiva per l'utilizzo del nome e della classe: IntelliJ IDEA utilizza/riempie automaticamente l'attributo nome nel suo ultimo editor di layout (v13) – rmirabelle

39

Come fonte Activity.onCreateView dice:

String fname = attrs.getAttributeValue(null, "class"); 
TypedArray a = context.obtainStyledAttributes(attrs, com.android.internal.R.styleable.Fragment); 
if (fname == null) { 
    fname = a.getString(com.android.internal.R.styleable.Fragment_name); 
} 

Che apparentemente significa che il programma sembra attributo "class" per primo. E su fail appare l'attributo "nome". Quindi per quanto è vero usando "classe" se più efficiente.

+1

Ho appena controllato, il modello di base fornito da Android Studio 2.0 utilizza l'attributo 'nome: xxx' per impostazione predefinita. – yask

+0

"L'attributo android: name nello specifica la classe Fragment per creare un'istanza nel layout." Questa è la definizione che ho visto nel sito web degli sviluppatori. Pagina: [collegamento] (https://developer.android.com/guide/components/fragments.html). –

0

spiacenti tutti gli esperti sono qui, posso sbagliarmi, ma come per la mia conoscenza Android: nome attributo del frammento viene utilizzato per trovare frammento, quando usiamo getFragmentByTag() metodo della classe fragmentManager. anche android: l'attributo classe viene utilizzato per trovare la classe di frammenti che generalmente includiamo per il frammento statico .

Spero che questo vi aiuterà .. grazie

+1

Secondo [questa pagina] (http://developer.android.com/reference/android/app/Fragment.html), usano l'attributo 'android: tag' per quello, il che ha senso:' android: tag can essere utilizzato in per fornire un nome tag specifico per il frammento' – user1978019

Problemi correlati