2012-04-15 10 views
61

He leído la documentación sobre Fragments en la Guía del desarrollador de Android y he visto que a veces especifican la clase para crear instancias con el atributo de etiqueta de fragmento android: name y en algún momento que utilizan la clase : atributo:Diseño de la actividad: Clase de fragmento: vs android: atributos de nombre

<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" /> 

son androide: nombrar y clase: intercambiables? Si utilizo la función de autocompletado en Eclipse, ambos muestran la misma sugerencia de documentación (es decir, el atributo proporciona el nombre de clase que se creará la instancia). Tal vez debe utilizar el segundo cuando la clase que se creará la instancia tiene un nombre que es diferente del nombre del archivo java, como TitlesFragment que se encuentra en el archivo FragmentLayout.java? ¿O puedo usar la sintaxis package.fileDOTjava $ Class también con el atributo android: name?

Me gustaría tener alguna documentación para etiquetas y atributos XML como para las clases Java de Android (he preguntado sobre ello en otro question).

Respuesta

23

Son android: nombre y clase: intercambiables?

Presumiblemente, sí. Solo he usado class, y eso parece ser lo que usan la mayoría de los ejemplos de Google, pero sí veo dónde usan android:name en algunas muestras. Lamentablemente, no hay documentación formal y completa para <fragment>.

+0

Me gustaría que hubiera documentación. Dado que 'class' no tiene un espacio de nombres, tengo curiosidad de saber si ese atributo no se utilizó solo mientras se desarrollaban los fragmentos, sino que se dejaron porque ahora no pueden romper la compatibilidad. Por razones de coherencia, 'android: name' parece ser siempre ligeramente preferible y, como señaló user1550716, parece que son intercambiables. – spaaarky21

+0

@ spaaarky21: Sí, cambié a 'android: name' en todas partes. – CommonsWare

+1

crédito adicional para el uso de nombre vs clase: IntelliJ IDEA utiliza/autocompleta el atributo de nombre en su último editor de diseño (v13) – rmirabelle

39

Como fuente 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); 
} 

Eso significa que aparentemente programa busca atributo "class" en primer lugar. Y en el fallo se ve el atributo "nombre". Por lo tanto, es cierto usando "clase" si es más eficiente.

+1

Acabo de verificar, la plantilla básica proporcionada por Android Studio 2.0 usa el atributo 'name: xxx' de forma predeterminada. – yask

+0

"El atributo android: name en el especifica la clase Fragment para crear instancias en el diseño". Esta es la definición que vi en el sitio web para desarrolladores. Página: [enlace] (https://developer.android.com/guide/components/fragments.html). –

0

sentimos todos los expertos están aquí, puedo estar equivocado, pero según mi conocimiento androide : nombrar atributo del fragmento se utiliza para encontrar el fragmento, cuando usamos getFragmentByTag() método de la clase fragmentManager. también android: clase atributo se utiliza para encontrar la clase de fragmento que generalmente incluimos para fragmento estático.

Esperamos que esto ayude .. gracias

+1

Según [esta página] (http://developer.android.com/reference/android/app/Fragment.html), usan el atributo 'android: tag' para eso, lo cual tiene sentido:' android: tag can ser utilizado en para proporcionar un nombre de etiqueta específico para el fragmento' – user1978019

Cuestiones relacionadas