89 votes

Comment ajouter un pied de page dans un ListView ?

Je suis en train de développer une application, dans mon application, j'utilise Listview pour afficher les données en utilisant le parsing dom, je veux un pied de page dans listview, quand je clique sur le pied de page plus de données supplémentaires ajoutées à listview, j'ai joint l'image, je voudrais que la conception et le processus, s'il vous plaît se référer à l'image1 et imgae2.I mentionner pied de page dans le rectangle rouge

Fig1-Pied de page comme "More News" (plus de nouvelles)
alt text

alt text

Fig2-Ajouter 10 enregistrements supplémentaires dans le listview

209voto

Shaireen Points 2018

Créez une vue de pied de page composée du texte que vous souhaitez définir comme pied de page, puis essayez les éléments suivants

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

La mise en page du pied de page pourrait être quelque chose comme ceci :

<?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 classe d'activité pourrait être :

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

33 votes

J'ai eu quelques problèmes pour faire fonctionner ce code et je les ai résolus. Voici ce que dit la documentation de addFooterView() NOTE: Call this before calling setAdapter. This is so ListView can wrap the supplied cursor with one that will also account for header and footer views.

13 votes

@gcl1 Dans ce cas, il ne s'agit pas d'un pied de page, mais d'un élément ordinaire de votre mise en page qui se trouve sous la vue en liste. Il suffit de le placer sous la vue en liste ?

2 votes

Un petit mot pour @demonsten : si vous appelez setAdapter() avant d'ajouter les vues, vous allez passer un mauvais moment.

10voto

Aniket Thakur Points 10135

Les réponses ici sont un peu dépassées. Bien que le code reste le même, il y a quelques changements dans le comportement.

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

Informations sur addFooterView() méthode

Ajouter une vue fixe pour apparaître en bas de la liste. Si addFooterView() est appelé plus d'une fois, les vues apparaîtront dans l'ordre où elles ont été ajoutées. Les vues ajoutées à l'aide de cet appel peuvent prendre le focus si elles le souhaitent.

La plupart des réponses ci-dessus mettent l'accent sur un point très important.

addFooterView() doit être appelé avant d'appeler setAdapter() Cela permet à ListView d'envelopper le curseur fourni avec un autre qui tiendra également compte des vues d'en-tête et de pied de page.

Depuis Kitkat, cela a changé.

Note : Lors de sa première introduction, cette méthode ne pouvait être appelée qu'avant de définir l'adaptateur avec setAdapter(ListAdapter). À partir de KITKAT, cette méthode peut être appelée à tout moment. Si l'adaptateur de la ListView n'étend pas HeaderViewListAdapter, il sera enveloppé avec une instance de WrapperListAdapter.

Documentation

9voto

Ofer Lando Points 31

Je sais que c'est une très vieille question, mais j'ai cherché sur Google et j'ai trouvé que la réponse fournie n'était pas satisfaisante à 100%, parce que comme gcl1 l'a mentionné - de cette façon le pied de page n'est pas vraiment un pied de page à l'écran - c'est juste un "ajout" à la liste.

En résumé, pour les autres qui pourraient venir sur Google, j'ai trouvé la suggestion suivante ici : Pied de page fixe et toujours visible sous ListFragment

Essayez de procéder comme suit, en mettant l'accent sur le bouton (ou tout autre élément de pied de page) figurant en premier dans le XML, puis en ajoutant la liste comme "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>

6voto

ruan65 Points 402

Si le ListView est un enfant du ListActivity :

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

(à l'intérieur de onCreate())

2voto

Nepster Points 893

L'activité dans laquelle vous voulez ajouter le pied de page de la liste et j'ai également généré un événement sur le clic du pied de page de la liste.

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

        }

}

activité_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>

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X