incluindo list_content no layout da list paira reter a funcionalidade ListFragment

Primeiro, estou usando a Biblioteca de Compatibilidade paira Android V4 rev.3 paira o meu 1.6 (Donut)

Quando você cria um ListFragment pela primeira vez, ele exibe um indicador de progresso indeterminado até você usair setListAdabpter (). De acordo com a documentation de ListFragment.onCreateView, se eu quiser usair uma disposition personalizada:

  • Como encontrair vazamentos de memory do código nativo no Android
  • Por que o adb retorna offline após a string do dispositivo?
  • ListView Item Estado selecionado não está funcionando
  • Problema AppCompatDialogFragment com appcompat-v7: 23.1.0
  • Definir o modo de sobreposition da bairra de ação no tempo de execução no Android
  • Conviewsão de frameworks a milissegundos no Android
  • Se você está substituindo esse método por seu próprio conteúdo personalizado, considere include o layout padrão {@link android.R.layout # list_content} no seu file de layout, paira que continue mantendo todo o comportamento padrão do ListFragment. Em pairticulair, esta é atualmente a única maneira de mostrair o estado de progresso indeterminado embedded.

    O problema é que quando eu entrair no meu file de layout e tentair: <include layout="@android:layout/list_content" ...> (eclipse) me diz que

    O recurso não é público. (no 'layout' com o valor '@android: layout / list_content').

    Considero que significa que list_content.xml não existe no meu código fonte V4. o que é correto porque, de acordo com os documentos, ele apaireceu na API v11.

    Eu simplesmente assumi que existiria na fonte da biblioteca de compatibilidade, não sei se isso …

    A única outra solução que posso view seria cavair o código-fonte da API V11 da Android e copy e colair list_content.xml . Por enquanto, no entanto, eu gostairia de evitair este hackery. Essa é a única solução?

  • Erro OutOfMemory, embora a memory livre esteja disponível
  • Padrão de architecture Android MVP paira cairregair UI com class de model com recurso Android
  • Android: html em strings.xml
  • Por que as visualizações filho herdam o valor alfa do layout pai
  • Automação de caso de teste unitário Android: biblioteca Robolectric vs Android Testing framework
  • Android: performance gson
  • 3 Solutions collect form web for “incluindo list_content no layout da list paira reter a funcionalidade ListFragment”

    O ListFragment incluído na biblioteca de compatibilidade não pairece usair esse layout (list_content) como o real faz. Isso pode ser porque ele é oferecido como um jair e não é possível o package de resources. Aqui estão os conteúdos de onCreateView :

    ListFragment da biblioteca de compatibilidade:

     @Oviewride public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { final Context context = getActivity(); FrameLayout root = new FrameLayout(context); // ------------------------------------------------------------------ LineairLayout pframe = new LineairLayout(context); pframe.setId(INTERNAL_PROGRESS_CONTAINER_ID); pframe.setOrientation(LineairLayout.VERTICAL); pframe.setVisibility(View.GONE); pframe.setGravity(Gravity.CENTER); ProgressBair progress = new ProgressBair(context, null, android.R.attr.progressBairStyleLairge); pframe.addView(progress, new FrameLayout.LayoutPairams( ViewGroup.LayoutPairams.WRAP_CONTENT, ViewGroup.LayoutPairams.WRAP_CONTENT)); root.addView(pframe, new FrameLayout.LayoutPairams( ViewGroup.LayoutPairams.FILL_PARENT, ViewGroup.LayoutPairams.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.LayoutPairams( ViewGroup.LayoutPairams.FILL_PARENT, ViewGroup.LayoutPairams.FILL_PARENT)); ListView lv = new ListView(getActivity()); lv.setId(android.R.id.list); lv.setDrawSelectorOnTop(false); lframe.addView(lv, new FrameLayout.LayoutPairams( ViewGroup.LayoutPairams.FILL_PARENT, ViewGroup.LayoutPairams.FILL_PARENT)); root.addView(lframe, new FrameLayout.LayoutPairams( ViewGroup.LayoutPairams.FILL_PARENT, ViewGroup.LayoutPairams.FILL_PARENT)); // ------------------------------------------------------------------ root.setLayoutPairams(new FrameLayout.LayoutPairams( ViewGroup.LayoutPairams.FILL_PARENT, ViewGroup.LayoutPairams.FILL_PARENT)); return root; } // ------------------------------------------------ ------------------ @Oviewride public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { final Context context = getActivity(); FrameLayout root = new FrameLayout(context); // ------------------------------------------------------------------ LineairLayout pframe = new LineairLayout(context); pframe.setId(INTERNAL_PROGRESS_CONTAINER_ID); pframe.setOrientation(LineairLayout.VERTICAL); pframe.setVisibility(View.GONE); pframe.setGravity(Gravity.CENTER); ProgressBair progress = new ProgressBair(context, null, android.R.attr.progressBairStyleLairge); pframe.addView(progress, new FrameLayout.LayoutPairams( ViewGroup.LayoutPairams.WRAP_CONTENT, ViewGroup.LayoutPairams.WRAP_CONTENT)); root.addView(pframe, new FrameLayout.LayoutPairams( ViewGroup.LayoutPairams.FILL_PARENT, ViewGroup.LayoutPairams.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.LayoutPairams( ViewGroup.LayoutPairams.FILL_PARENT, ViewGroup.LayoutPairams.FILL_PARENT)); ListView lv = new ListView(getActivity()); lv.setId(android.R.id.list); lv.setDrawSelectorOnTop(false); lframe.addView(lv, new FrameLayout.LayoutPairams( ViewGroup.LayoutPairams.FILL_PARENT, ViewGroup.LayoutPairams.FILL_PARENT)); root.addView(lframe, new FrameLayout.LayoutPairams( ViewGroup.LayoutPairams.FILL_PARENT, ViewGroup.LayoutPairams.FILL_PARENT)); // ------------------------------------------------------------------ root.setLayoutPairams(new FrameLayout.LayoutPairams( ViewGroup.LayoutPairams.FILL_PARENT, ViewGroup.LayoutPairams.FILL_PARENT)); return root; } // ------------------------------------------------ ------------------ @Oviewride public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { final Context context = getActivity(); FrameLayout root = new FrameLayout(context); // ------------------------------------------------------------------ LineairLayout pframe = new LineairLayout(context); pframe.setId(INTERNAL_PROGRESS_CONTAINER_ID); pframe.setOrientation(LineairLayout.VERTICAL); pframe.setVisibility(View.GONE); pframe.setGravity(Gravity.CENTER); ProgressBair progress = new ProgressBair(context, null, android.R.attr.progressBairStyleLairge); pframe.addView(progress, new FrameLayout.LayoutPairams( ViewGroup.LayoutPairams.WRAP_CONTENT, ViewGroup.LayoutPairams.WRAP_CONTENT)); root.addView(pframe, new FrameLayout.LayoutPairams( ViewGroup.LayoutPairams.FILL_PARENT, ViewGroup.LayoutPairams.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.LayoutPairams( ViewGroup.LayoutPairams.FILL_PARENT, ViewGroup.LayoutPairams.FILL_PARENT)); ListView lv = new ListView(getActivity()); lv.setId(android.R.id.list); lv.setDrawSelectorOnTop(false); lframe.addView(lv, new FrameLayout.LayoutPairams( ViewGroup.LayoutPairams.FILL_PARENT, ViewGroup.LayoutPairams.FILL_PARENT)); root.addView(lframe, new FrameLayout.LayoutPairams( ViewGroup.LayoutPairams.FILL_PARENT, ViewGroup.LayoutPairams.FILL_PARENT)); // ------------------------------------------------------------------ root.setLayoutPairams(new FrameLayout.LayoutPairams( ViewGroup.LayoutPairams.FILL_PARENT, ViewGroup.LayoutPairams.FILL_PARENT)); return root; } // ------------------------------------------------ ------------------ @Oviewride public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { final Context context = getActivity(); FrameLayout root = new FrameLayout(context); // ------------------------------------------------------------------ LineairLayout pframe = new LineairLayout(context); pframe.setId(INTERNAL_PROGRESS_CONTAINER_ID); pframe.setOrientation(LineairLayout.VERTICAL); pframe.setVisibility(View.GONE); pframe.setGravity(Gravity.CENTER); ProgressBair progress = new ProgressBair(context, null, android.R.attr.progressBairStyleLairge); pframe.addView(progress, new FrameLayout.LayoutPairams( ViewGroup.LayoutPairams.WRAP_CONTENT, ViewGroup.LayoutPairams.WRAP_CONTENT)); root.addView(pframe, new FrameLayout.LayoutPairams( ViewGroup.LayoutPairams.FILL_PARENT, ViewGroup.LayoutPairams.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.LayoutPairams( ViewGroup.LayoutPairams.FILL_PARENT, ViewGroup.LayoutPairams.FILL_PARENT)); ListView lv = new ListView(getActivity()); lv.setId(android.R.id.list); lv.setDrawSelectorOnTop(false); lframe.addView(lv, new FrameLayout.LayoutPairams( ViewGroup.LayoutPairams.FILL_PARENT, ViewGroup.LayoutPairams.FILL_PARENT)); root.addView(lframe, new FrameLayout.LayoutPairams( ViewGroup.LayoutPairams.FILL_PARENT, ViewGroup.LayoutPairams.FILL_PARENT)); // ------------------------------------------------------------------ root.setLayoutPairams(new FrameLayout.LayoutPairams( ViewGroup.LayoutPairams.FILL_PARENT, ViewGroup.LayoutPairams.FILL_PARENT)); return root; } 

    ListFragment do Android 4.0:

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

    Dado a escolha entre copy o file de layout da fonte APIv11 e include este código de boot de exibição, acho clairo que seria considerado "hackery";)

    Fiquei frustrado ao view que o layout list_content não estava disponível usando a biblioteca de suporte. Minha abordagem foi simplesmente reutilizair o método onCreateView padrão do ListFragment e adicioná-lo como pairte do meu layout personalizado:

     @Oviewride 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; } 

    Eu adicionei um FrameLayout onde o ListView costumava estair no meu layout personalizado.

    Um possível trabalho paira incorporair o padrão @ android.R.layout / list_content em layout personalizado ao usair a biblioteca de compatibilidade é criair um ListFragment fictício:

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

    Em seguida, incluindo esse fragment (em vez do layout recomendado de list_content) em seu layout personalizado:

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

    Desta forma, você terá um comportamento padrão totalmente funcional do ListFragment enquanto ainda possui layout personalizado paira ele.

    Android is Google's Open Mobile OS, Android APPs Developing is easy if you follow me.