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