web-dev-qa-db-fra.com

Comment ajouter un pied de page dans ListView?

Je développe une application. Dans mon application, j'utilise Listview pour afficher des données à l'aide de l'analyse syntaxique. Je souhaite passer en bas de page dans Listview. processus, veuillez vous reporter aux images1 et imgae2.Je mentionne le pied de page dans le rectangle rouge

Fig1-Footer like "More News"
alt text

alt text

Fig2-Add additionnel 10 enregistrement ajouté dans listview

87
JohnNick

Créez une disposition de vue de pied de page composée du 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 mise en page pour le 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);
    }
}
203
Shaireen

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

Ajouter une vue fixe pour apparaître au bas de la liste. Si addFooterView() est appelé plusieurs fois, les vues apparaissent 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(). ListView peut ainsi envelopper le curseur fourni avec un curseur tenant également compte des vues d'en-tête et de pied de page.

De KitKat cela a changé.

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

Documentation

9
Aniket Thakur

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

La ligne du bas - pour d'autres qui peuvent google leur chemin ici - j'ai trouvé la suggestion suivante ici: pied de page fixe et toujours visible ci-dessous ListFragment

Essayez de procéder comme suit, en mettant l’accent sur le bouton (ou l’un des éléments de pied de page) énumérés en premier dans le fichier XML, puis ajoutez la liste sous la forme "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>
9
Ofer Lando

Si ListView est un enfant de ListActivity:

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

(dans onCreate ())

5
Andrey

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

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 listview,

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 disposition 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 cela ne fonctionne pas, référez-vous à cet article entendre

0
Kusal Thiwanka