Incluyendo list_content en el diseño de lista para conservar la funcionalidad ListFragment

Primero de, estoy usando La Biblioteca de Compatibilidad de Android V4 rev.3 para mi 1.6 (Donut)

Cuando crea un ListFragment por primera vez, muestra un indicador de progreso indeterminado hasta que use setListAdabpter (). De acuerdo con la documentación de ListFragment.onCreateView, si quiero usar una disposición personalizada:

Si está sobreescribiendo este método con su propio contenido personalizado, considere incluir el diseño estándar {@link android.R.layout # list_content} en su archivo de diseño, para que continúe reteniendo todo el comportamiento estándar de ListFragment. En particular, esta es actualmente la única manera de mostrar el estado de progreso indeterminado incorporado.

El problema es que cuando <include layout="@android:layout/list_content" ...> en mi archivo de diseño e intento: <include layout="@android:layout/list_content" ...> it (eclipse) me dice que

El recurso no es público. (En 'layout' con el valor '@android: layout / list_content').

Tomo eso para significar que list_content.xml no existe en mi código fuente V4. Que es correcto porque según los documentos apareció en API v11.

Acabo de asumir que existiría en la fuente de la biblioteca de compatibilidad, no sé si lo hace …

La única otra solución que puedo ver sería cavar el código fuente del API V11 de android y copiar y pegar list_content.xml . Por ahora sin embargo me gustaría evitar este hackery. ¿Es esta la única solución?

3 Solutions collect form web for “Incluyendo list_content en el diseño de lista para conservar la funcionalidad ListFragment”

El ListFragment incluido en la biblioteca de compatibilidad no parece utilizar ese diseño (list_content) como el real. Esto puede deberse a que se ofrece como un tarro y no es posible empaquetar recursos. Aquí están los contenidos de su onCreateView :

ListFragment de la biblioteca de compatibilidad:

 @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { final Context context = getActivity(); FrameLayout root = new FrameLayout(context); // ------------------------------------------------------------------ LinearLayout pframe = new LinearLayout(context); pframe.setId(INTERNAL_PROGRESS_CONTAINER_ID); pframe.setOrientation(LinearLayout.VERTICAL); pframe.setVisibility(View.GONE); pframe.setGravity(Gravity.CENTER); ProgressBar progress = new ProgressBar(context, null, android.R.attr.progressBarStyleLarge); pframe.addView(progress, new FrameLayout.LayoutParams( ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT)); root.addView(pframe, new FrameLayout.LayoutParams( ViewGroup.LayoutParams.FILL_PARENT, ViewGroup.LayoutParams.FILL_PARENT)); // ------------------------------------------------------------------ FrameLayout lframe = new FrameLayout(context); lframe.setId(INTERNAL_LIST_CONTAINER_ID); TextView tv = new TextView(getActivity()); tv.setId(INTERNAL_EMPTY_ID); tv.setGravity(Gravity.CENTER); lframe.addView(tv, new FrameLayout.LayoutParams( ViewGroup.LayoutParams.FILL_PARENT, ViewGroup.LayoutParams.FILL_PARENT)); ListView lv = new ListView(getActivity()); lv.setId(android.R.id.list); lv.setDrawSelectorOnTop(false); lframe.addView(lv, new FrameLayout.LayoutParams( ViewGroup.LayoutParams.FILL_PARENT, ViewGroup.LayoutParams.FILL_PARENT)); root.addView(lframe, new FrameLayout.LayoutParams( ViewGroup.LayoutParams.FILL_PARENT, ViewGroup.LayoutParams.FILL_PARENT)); // ------------------------------------------------------------------ root.setLayoutParams(new FrameLayout.LayoutParams( ViewGroup.LayoutParams.FILL_PARENT, ViewGroup.LayoutParams.FILL_PARENT)); return root; } 

ListFragment desde Android 4.0:

 @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { return inflater.inflate(com.android.internal.R.layout.list_content, container, false); } 

Dada la opción entre copiar el archivo de diseño de la fuente APIv11 e incluir este código de inicialización de la vista, creo que está claro cuál sería considerado 'hackery';)

Me sentí frustrado al ver que el diseño de list_content no estaba disponible con la biblioteca de soporte. Mi enfoque era simplemente reutilizar el método onCreateView predeterminado del ListFragment y añadirlo como parte de mi diseño personalizado:

 @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View listContent = super.onCreateView(inflater, container, savedInstanceState); View v = inflater.inflate(R.layout.my_custom_layout, container, false); FrameLayout listContainer = (FrameLayout) v.findViewById(R.id.my_list_container); listContainer.addView(listContent); return v; } 

Añadí un FrameLayout donde el ListView solía estar en mi diseño personalizado.

Un trabajo posible alrededor de incorporar default @ android.R.layout / list_content en el diseño personalizado cuando se utiliza la biblioteca de compatibilidad es crear un dummy ListFragment:

 package com.example.app; import android.support.v4.app.ListFragment; public class ListContentFragment extends ListFragment { @Override public void onViewCreated(View view, Bundle savedInstanceState) { //Supress default list and empty text behavior //super.onViewCreated(view, savedInstanceState); } } 

A continuación, incluya este fragmento (en lugar de la distribución recomendada list_content) en su diseño personalizado:

 ... <fragment class="com.example.app.ListContentFragment" android:layout_weight ="1" android:layout_width ="fill_parent" android:layout_height ="0dip" /> ... 

De esta manera obtendrá un comportamiento predeterminado completamente funcional del ListFragment mientras todavía tiene un diseño personalizado para él.

  • ¿Qué es el ButtonBarLayout y cómo debemos usarlo?
  • Barra de acción de estilo personalizado no funciona en android 4
  • Preferences Support Library - SwitchPreference no funciona
  • Advertencias de Proguard "no se puede escribir recurso (entrada de zip duplicado)"
  • Eclipse no reconoce android.support.v13.app.FragmentActivity aunque tengo la biblioteca android-support-v13
  • Cómo utilizar y estilo nuevo AlertDialog de appCompat 22.1 y superior
  • Configuración de Android Proguard para la v7 Support Library ActionBar
  • NavigationDrawer utilizando sólo la biblioteca de asistencia de Android
  • ¿Cómo detectar anidadas fling detenido en CoordinatorLayout.Behavior?
  • Error en lib appcompat_v7
  • Barra de herramientas Navegación Icono de Hamburger ausente
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.