2010-11-24 17 views
84

Estoy desarrollando una aplicación, en mi aplicación, estoy usando Listview para mostrar datos usando dom análisis, quiero pie de página en listview, cuando hago clic en el pie de página adicional más datos agreguen a la vista de lista, adjunté imagen, me gustaría diseño y proceso, consulte imagen1 y imgae2.I mencionan pie de página en el rectángulo rojo¿Cómo agregar un pie de página en ListView?

Fig 1-pie de página como "Más Noticias"
alt text

alt text

Fig2-Añadir adicional de 10 registro añadido en listview

Respuesta

199

Crear un diseño de vista de pie de página que consta de texto que desea establecer como pie de página y luego tratar

View footerView = ((LayoutInflater) ActivityContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE)).inflate(R.layout.footer_layout, null, false); 
ListView.addFooterView(footerView); 

Disposición de pie de página podría ser algo como esto:

<?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:text="@string/footer_text_1" 
     android:id="@+id/footer_1" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:textSize="14dip" 
     android:textStyle="bold" 
     android:layout_marginRight="5dip" /> 
    </LinearLayout> 
</LinearLayout> 

La clase de actividad podría ser :

public class MyListActivty extends ListActivity { 
    private Context context = null; 
    private ListView list = null; 

    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     list = (ListView)findViewById(android.R.id.list); 

     //code to set adapter to populate list 
     View footerView = ((LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE)).inflate(R.layout.footer_layout, null, false); 
     list.addFooterView(footerView); 
    } 
} 
+6

Esto es bueno, pero lo que si desea que el pie de página que se fija en la pantalla, en lugar de sólo es visible cuando desplaza a la parte inferior? ¿Y qué pasa si desea que el pie de página sea visible incluso cuando la lista esté VACÍA? Consulte la pregunta completa en http://stackoverflow.com/questions/12353701/fixed-and-always-visible-footer-below-listfragment. – gcl1

+30

Tuve algunos problemas para hacer que este código funcionara y los resolví. Esto es lo que indica la documentación de addFooterView() 'NOTA: Llame esto antes de llamar a setAdapter. Esto es para que ListView pueda ajustar el cursor suministrado con uno que también represente las vistas de encabezado y pie de página. – demosten

+13

@ gcl1 En ese caso, ese no es un pie de página, solo un elemento ordinario en su diseño que está debajo de la vista de lista. Solo, ya sabes, ponlo debajo de la vista de lista? – Davor

9

Sé que esta es una pregunta muy antigua, pero busqué en Google y encontré la respuesta pr no fue 100% satisfactorio, porque como mencionó gcl1 - de esta manera el pie de página no es realmente un pie de página para la pantalla - es solo un "complemento" a la lista.

En pocas palabras - para otros que puedan Google su camino aquí - me encontré con la siguiente sugerencia aquí: Fixed and always visible footer below ListFragment

Trate de hacer de la siguiente manera, donde el énfasis está en el botón (o cualquier elemento de pie de página) que aparece por primera vez en el XML - y luego se añade la lista como "layout_above":

<RelativeLayout> 

<Button android:id="@+id/footer" android:layout_alignParentBottom="true"/> 
<ListView android:id="@android:id/list" **android:layout_above**="@id/footer"> <!-- the list --> 

</RelativeLayout> 
2

la actividad en la que desea agregar listview pie de página y también he generar un evento en la vista de lista pie de página clic.

public class MainActivity extends Activity 
{ 

     @Override 
     protected void onCreate(Bundle savedInstanceState) 
     { 

      super.onCreate(savedInstanceState); 
      setContentView(R.layout.activity_main); 

      ListView list_of_f = (ListView) findViewById(R.id.list_of_f); 

      LayoutInflater inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE); 

      View view = inflater.inflate(R.layout.web_view, null); // i have open a webview on the listview footer 

      RelativeLayout layoutFooter = (RelativeLayout) view.findViewById(R.id.layoutFooter); 

      list_of_f.addFooterView(view); 

     } 

} 

activity_main.xml

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:background="@drawable/bg" > 

    <ImageView 
     android:id="@+id/dept_nav" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:background="@drawable/dept_nav" /> 

    <ListView 
     android:id="@+id/list_of_f" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layout_below="@+id/dept_nav" 
     android:layout_margin="5dp" 
     android:layout_marginTop="10dp" 
     android:divider="@null" 
     android:dividerHeight="0dp" 
     android:listSelector="@android:color/transparent" > 
    </ListView> 

</RelativeLayout> 
5

Si el ListView es un hijo de la ListActivity:

getListView().addFooterView(
    getLayoutInflater().inflate(R.layout.footer_view, null) 
); 

(dentro onCreate())

8

respuestas aquí son un poco anticuados . Aunque el código sigue siendo el mismo, hay algunos cambios en el comportamiento.

public class MyListActivity extends ListActivity { 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     TextView footerView = (TextView) ((LayoutInflater) this.getSystemService(Context.LAYOUT_INFLATER_SERVICE)).inflate(R.layout.footer_view, null, false); 
     getListView().addFooterView(footerView); 
     setListAdapter(new ArrayAdapter<String>(this, getResources().getStringArray(R.array.news))); 
    } 
} 

Información sobre addFooterView() método

Añadir un punto de vista fijo a aparecer en la parte inferior de la lista. Si se llama al addFooterView() más de una vez, las vistas aparecerán en el orden en que se agregaron. Las vistas agregadas usando esta llamada pueden enfocarse si así lo desean.

La mayoría de las respuestas anteriores de estrés muy importante punto -

addFooterView() debe ser llamado antes de llamar setAdapter() .Esta es tan ListView puede envolver el cursor suministrado con uno que también representará vistas de encabezado y pie .

De Kitkat esto ha cambiado.

Nota: Cuando se introdujo por primera vez, este método solo se podía llamar antes de configurar el adaptador con setAdapter (ListAdapter). Comenzando con KITKAT, se puede llamar a este método en cualquier momento. Si el adaptador de ListView no extiende HeaderViewListAdapter, se ajustará con una instancia compatible de WrapperListAdapter.

Documentation

Cuestiones relacionadas