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:
- Los elementos de la lista de reproducción de Android cambian de color de fondo al desplazarse
- Cómo reemplazar completamente listView / GridView con RecyclerView?
- Adaptador personalizado Android: elementos de lista sólo rellenados al desplazarse
- Lista de paginación y CursorLoader
- Agregar margen encima del elemento ListView superior (y inferior al último) en Android
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>
- GetView llamado con la posición incorrecta al desplazarse rápido
- Actualizar Android ListView
- ListView artículo no encontrado
- Cómo establecer ListView no se puede hacer clic
- Manera fácil de agregar imágenes a un ListView de Android
- ¿Cómo obtener ViewSwitcher para envolver sólo la altura de vista actualmente visualizada?
- El dedo de desplazamiento rápido desaparece mientras se desplaza AlphabetIndexer
- OnTouchListener evita comentarios visuales
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.
- Android studio: las expresiones lambda no son compatibles en -source 1.7 (use -source 8 o superior para permitir expresiones lambda)
- Subir archivo grande en Android sin error outofmemory