Comment ajouter un pied de page dans ListView?

88

Je développe une application, dans mon application, j'utilise Listview pour afficher des données à l'aide de l'analyse dom, je souhaite placer le pied de page dans la liste processus, veuillez vous référer à image1 et imgae2.Je mentionne le pied de page dans le rectangle rouge

Fig1-Footer comme "More News"
texte alternatif

texte alternatif

Fig2-Ajouter 10 enregistrements supplémentaires ajoutés dans la liste

JohnNick
la source

Réponses:

205

Créez une disposition de vue de pied de page composée de texte que vous souhaitez définir comme pied de page, puis essayez

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

La disposition du pied de page pourrait ressembler à 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);
    }
}
Shaireen
la source
7
C'est bien, mais que faire si vous voulez que le pied de page soit FIXE à l'écran, plutôt que visible uniquement lorsque vous faites défiler vers le bas? Et si vous voulez que le pied de page soit visible même lorsque la liste est VIDE? Voir la question complète sur stackoverflow.com/questions/12353701/… .
gcl1
33
J'ai eu quelques problèmes pour faire fonctionner ce code et je les ai résolus. Voici ce que la documentation d'addFooterView () indiqueNOTE: 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.
Démonstration
13
@ gcl1 Dans ce cas, ce n'est pas un pied de page, juste un élément ordinaire de votre mise en page qui se trouve sous la vue de liste. Juste, vous savez, mettez-le sous la vue de liste?
Davor le
2
Juste un cri à @demonsten: si vous appelez setAdapter () avant d'ajouter les vues, vous allez passer un mauvais moment.
Ben Ogorek
1
s'il n'y a pas de données dans l'adaptateur, le pied de page ne se joint pas (s'affiche). alors comment pouvons-nous afficher le pied de page même s'il n'y a pas de données dans l'adaptateur? merci
Kalpesh Lakhani
10

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 la addFooterView()méthode

Ajoutez une vue fixe qui apparaîtra en bas de la liste. Si addFooterView()est appelé plus d'une fois, les vues apparaîtront dans l'ordre dans lequel 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 soulignent un point très important -

addFooterView() doit être appelé avant d'appeler setAdapter() . C'est pour que ListView puisse envelopper le curseur fourni avec un curseur qui tiendra également compte des vues d'en-tête et de pied de page.

De Kitkat, cela a changé.

Remarque: 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 ListView n'étend pas HeaderViewListAdapter, il sera encapsulé avec une instance de prise en charge de WrapperListAdapter.

Documentation

Aniket Thakur
la source
9

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

En bout de ligne - pour ceux qui peuvent rechercher leur chemin ici - j'ai trouvé la suggestion suivante ici: Pied de page fixe et toujours visible sous ListFragment

Essayez de faire comme suit, où l'accent est mis sur le bouton (ou tout élément de pied de page) répertorié en premier dans le XML - puis la liste est ajoutée en tant que "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>
Ofer Lando
la source
6

Si ListView est un enfant de ListActivity:

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

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

Andrey
la source
2

L'activité dans laquelle vous souhaitez ajouter un pied de page de liste et j'ai également générer un événement sur le clic de pied de page de 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);

        }

}

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>
AndroidGeek
la source
0

Dans cette question, la meilleure réponse ne fonctionne pas pour moi. Après cela, j'ai trouvé cette méthode pour afficher le pied de page de la liste,

LayoutInflater inflater = getLayoutInflater();
ViewGroup footerView = (ViewGroup)inflater.inflate(R.layout.footer_layout,listView,false);
listView.addFooterView(footerView, null, false);

Et créez un nouvel appel de mise en page footer_layout

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    <TextView
        android:id="@+id/tv"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="Done"
        android:textStyle="italic"
        android:background="#d6cf55"
        android:padding="10dp"/>
</LinearLayout>

Si le travail ne se réfère cet article entendre

Kusal Thiwanka
la source
0

vous pouvez utiliser un stackLayout, à l'intérieur de cette mise en page, vous pouvez mettre une liste d'un cadre, par exemple:

<StackLayout VerticalOptions="FillAndExpand">
            <ListView  ItemsSource="{Binding YourList}"
                       CachingStrategy="RecycleElement"
                       HasUnevenRows="True">

                <ListView.ItemTemplate>
                    <DataTemplate>
                        <ViewCell >
                            <StackLayout  Orientation="Horizontal">
                                <Label Text="{Binding Image, Mode=TwoWay}" />

                            </StackLayout>
                        </ViewCell>
                    </DataTemplate>
                </ListView.ItemTemplate>
            </ListView>
            <Frame BackgroundColor="AliceBlue" HorizontalOptions="FillAndExpand">
                <Button Text="More"></Button>
            </Frame>
        </StackLayout>

voici le résultat:

entrez la description de l'image ici

x-rw
la source