studio personalizado listfragment example ejemplo dentro crear android android-listview android-fragments

personalizado - listview fragment android studio example



El pie de página de Listview no muestra (2)

Creé una vista de lista dinámica con carga diferida. Intento mostrar un pie de página en la vista de lista, de modo que cuando el usuario se desplaza hacia la parte inferior de la vista de lista, muestre "cargando más elementos" (como pie de página) y cargue más elementos. He implementado la carga diferida. Configuré el pie de página, pero no se muestra en la vista de lista. Por favor, ayúdame.

Clase de fragmento de tabulación que contiene la vista de lista:

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 (Clase int tabfragment utilizada): 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>


Además de la respuesta aceptada, quería señalar que algunas versiones de Android quieren que se agregue el pie de página antes de que se establezca el adaptador y que en algunas versiones no parece importar.

He visto en mis propias aplicaciones que en la versión 4.4.4 no importa en qué orden llame a 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 . Agregar un encabezado siempre debe ocurrir 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, es mejor establecer los encabezados antes de llamar a setAdapter para evitar cualquier comportamiento extraño.


En realidad, tiene que agregar FooterView a la Lista antes de configurar el Adaptador. Como a continuación ...

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);