El pie de lista no muestra

He creado una lista dinámica con carga perezosa. Estoy tratando de mostrar un pie de página a la lista, de modo que cuando el usuario se desplaza a la parte inferior de la lista, mostrará "cargar más elementos" (como un pie de página) y se cargará más item.I han implementado la carga perezosa. He fijado el pie de página, pero no está consiguiendo exhibido en el listview. Por favor, ayúdame.

Clase Tabfragment que contiene listview:

package com.example.abe; import java.util.ArrayList; import android.annotation.TargetApi; import android.app.Activity; import android.content.Context; import android.os.Build; import android.os.Bundle; import android.support.v4.app.ListFragment; import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.AbsListView; import android.widget.AbsListView.OnScrollListener; import android.widget.ArrayAdapter; import android.widget.ListView; import android.widget.Toast; @TargetApi(Build.VERSION_CODES.HONEYCOMB) public class Tab1Fragment extends ListFragment { ListView lv; Activity act = this.getActivity(); Context ct = this.getActivity(); XMLGettersSetters data; boolean loadingMore = false; String abc[] = new String[50]; static int count = 0; final int itemsPerPage = 10; static ArrayList<String> myListItems = new ArrayList<String>(); ArrayList<String> myListItems2; ArrayAdapter<String> adapter; ArrayAdapter<String> adapter1; static int size = 0; int position = 0; int top = 0; static String android_array1[]; ArrayList<String> myListItems3; TabsFragmentActivity t = new TabsFragmentActivity(); String parsed[] = new String[MainActivity.Sarray1.length]; @SuppressWarnings("unused") @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { adapter = new ArrayAdapter<String>(getActivity().getBaseContext(), android.R.layout.simple_list_item_1, t.myarray); ; View root = inflater.inflate(R.layout.tab_frag1_layout, container, false); lv = (ListView) root.findViewById(android.R.id.list); lv.setAdapter(adapter); getActivity().setTitle("ABE ST count: " + t.stcount + " items"); parsed = MainActivity.Sarray1; for (int j = 0; j < parsed.length; j++) { System.out.println("sax" + parsed[j].toString()); } return root; } @Override public void onViewCreated(View view, Bundle savedInstanceState) { super.onViewCreated(view, savedInstanceState); View footerView = ((LayoutInflater) this.getActivity() .getSystemService(Context.LAYOUT_INFLATER_SERVICE)).inflate( R.layout.listfooter, null, false); lv.addFooterView(footerView); getListView().setOnScrollListener(new OnScrollListener() { @Override public void onScrollStateChanged(AbsListView view, int scrollState) { } @Override public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) { System.out.println(abc.length); System.out.println(count); System.out.println("First" + firstVisibleItem); System.out.println("Vis" + visibleItemCount); position = firstVisibleItem; View v = lv.getChildAt(0); top = (v == null) ? 0 : v.getTop(); int lastInScreen = firstVisibleItem + visibleItemCount; System.out.println("Last" + lastInScreen); System.out.println("Total" + totalItemCount); if ((lastInScreen == totalItemCount) && !(loadingMore)) { if (count < size) { try { Thread thread = new Thread(null, loadMoreListItems); thread.start(); } catch (Exception e) { e.printStackTrace(); } } else if (count != 0) { Toast.makeText(getActivity().getApplicationContext(), "Complete Data", Toast.LENGTH_LONG).show(); int lvcnt = lv.getCount(); System.out.println("Adapter Count " + " " + lvcnt); System.out.println("Abe adapter count" + " " + adapter.getCount()); } } } }); if (t.check1 == 0) { try { Thread thread = new Thread(null, loadMoreListItems); thread.start(); } catch (Exception e) { e.printStackTrace(); } } } private Runnable loadMoreListItems = new Runnable() { @Override public void run() { loadingMore = true; t.myarray1 = new ArrayList<String>(); try { Thread.sleep(1000); } catch (InterruptedException e) { } size = parsed.length; for (int i = 0; i < itemsPerPage; i++) { if (count < size) { t.myarray1.add(parsed[count].toString()); count = count + 1; System.out.println("Count in run " + " " + count); } else { break; } } Log.i("a", "b"); try { getActivity().runOnUiThread(returnRes); } catch (Exception e) { e.printStackTrace(); } Log.i("a", "b"); } }; private Runnable returnRes = new Runnable() { @Override public void run() { if (t.myarray1 != null && t.myarray1.size() > 0) { for (int j = 0; j < t.myarray1.size(); j++) { adapter.add(t.myarray1.get(j)); // adapter1.add(myListItems3.get(j)); } } // setListAdapter(adapter); Log.i("a", "b"); adapter.notifyDataSetChanged(); // lv.setSelection(position); lv.setSelectionFromTop(position, top); Log.i("a", "b"); getActivity().setTitle( "ABE ST count: " + String.valueOf(adapter.getCount()) + " items"); t.stcount = adapter.getCount(); loadingMore = false; t.check1 = 1; } }; } 

Listfooter xml (Utiliza la clase int tabfragment): XML para el pie de página:

 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="wrap_content" android:layout_height="wrap_content" android:paddingTop="7dip" android:paddingBottom="7dip" android:orientation="horizontal" android:gravity="center"> <LinearLayout android:id="@+id/footer_layout" android:layout_width="wrap_content" android:layout_height="wrap_content" android:orientation="horizontal" android:gravity="center" android:layout_gravity="center"> <TextView android:id="@+id/footer_1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginRight="5dip" android:text="Loading" android:textSize="14sp" android:textStyle="bold" /> </LinearLayout> </LinearLayout> 

En realidad, tienes que añadir FooterView a la lista antes de configurar el adaptador .. Como abajo ..

 View root = inflater.inflate(R.layout.tab_frag1_layout, container, false); lv = (ListView) root.findViewById(android.R.id.list); View footerView = ((LayoutInflater) this.getActivity() .getSystemService(Context.LAYOUT_INFLATER_SERVICE)).inflate( R.layout.listfooter, null, false); lv.addFooterView(footerView); lv.setAdapter(adapter); 

Además de la respuesta aceptada quería señalar que algunas versiones de Android quieren que el pie de página se agregue antes de que el adaptador se establece y alguna versión no parece importar.

He visto en mis propias aplicaciones que en la versión 4.4.4 no importa en qué orden llamar addFooterView y en la versión 4.2.2 el pie de página no se mostrará a menos que llame a addFooterView antes de setAdapter . La adición de un encabezado siempre debe suceder antes de llamar a setAdapter pero agregar un pie de página parece ser menos estricto, pero es útil saber que las diferentes versiones requieren una configuración diferente. Por lo tanto, lo mejor es configurar los encabezados antes de llamar a setAdapter para evitar cualquier comportamiento extraño.

  • ¿Cómo puedo crear un ListView con esquinas redondeadas en Android?
  • Implementar la búsqueda en ListView dentro del fragmento
  • Cómo agregar un TextView dinámicamente en los elementos ListView Android?
  • ChrisBanes PullToRefresh 'Cargando ...' issue
  • el color de fondo androide del listview permanece gris, no puede ser cambiado en el teléfono del pan de jengibre
  • ExpandableListView con groupView fijo mientras se desplaza
  • Actualizar ListView después de eliminar la operación
  • ¿Cómo utilizar desplazamiento rápido en android?
  • Efecto de botón de diapositiva en el elemento de vista de lista para Android
  • ¿Cómo mostrar una vista vacía con RecyclerView?
  • Obtener Posición de Vista Absoluta en ListView
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.