Come aggiungere un piè di pagina in ListView?


88

Sto sviluppando un'applicazione, Nella mia applicazione, sto utilizzando Listview per visualizzare i dati utilizzando l'analisi dom, voglio il piè di pagina in Listview, quando faccio clic sul piè di pagina altri dati aggiuntivi aggiungono alla visualizzazione elenco, ho allegato un'immagine, vorrei quel design e processo, si prega di fare riferimento a immagine1 e imgae2. Ho menzionato il piè di pagina nel rettangolo rosso

Fig1-Footer come "Altre notizie"
testo alternativo

testo alternativo

Fig2-Aggiungi altri 10 record aggiunti in listview

Risposte:


206

Creare un layout di visualizzazione del piè di pagina costituito dal testo che si desidera impostare come piè di pagina e quindi provare

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

Il layout per il piè di pagina potrebbe essere qualcosa del genere:

<?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 di attività potrebbe essere:

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

7
Questo va bene, ma cosa succede se vuoi che il piè di pagina sia FISSO sullo schermo, invece che visibile solo quando viene fatto scorrere verso il basso? E se desideri che il piè di pagina sia visibile anche quando l'elenco è VUOTO? Vedi la domanda completa su stackoverflow.com/questions/12353701/… .
gcl1

33
Ho avuto alcuni problemi nel far funzionare questo codice e li ho risolti. Ecco cosa afferma la documentazione di 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.
demosten

13
@ gcl1 In tal caso non è un piè di pagina, ma solo un elemento ordinario nel layout che si trova sotto la visualizzazione elenco. Solo, sai, metterlo sotto la visualizzazione elenco?
Davor

2
Solo un grido a @demonsten: se chiami setAdapter () prima di aggiungere le viste, ti divertirai un mondo.
Ben Ogorek

1
se non ci sono dati nell'adattatore, il piè di pagina non viene allegato (visualizzato). quindi come possiamo visualizzare il piè di pagina anche se non ci sono dati nell'adattatore? grazie
Kalpesh Lakhani

10

Le risposte qui sono un po 'obsolete. Sebbene il codice rimanga lo stesso, ci sono alcuni cambiamenti nel comportamento.

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

Informazioni sul addFooterView()metodo

Aggiungi una visualizzazione fissa da visualizzare in fondo all'elenco. Se addFooterView()viene chiamato più di una volta, le visualizzazioni appariranno nell'ordine in cui sono state aggiunte. Le visualizzazioni aggiunte utilizzando questa chiamata possono essere attivate se lo desiderano.

La maggior parte delle risposte sopra sottolineano un punto molto importante:

addFooterView()deve essere chiamato prima di chiamare setAdapter(). In questo modo ListView può racchiudere il cursore fornito con uno che terrà conto anche delle viste di intestazione e piè di pagina.

Da Kitkat questo è cambiato.

Nota: quando è stato introdotto per la prima volta, questo metodo poteva essere chiamato solo prima di impostare l'adattatore con setAdapter (ListAdapter). A partire da KITKAT, questo metodo può essere richiamato in qualsiasi momento. Se l'adattatore di ListView non estende HeaderViewListAdapter, verrà inserito in un'istanza di supporto di WrapperListAdapter.

Documentazione


9

So che questa è una domanda molto vecchia, ma ho cercato su Google qui e ho trovato la risposta fornita non soddisfacente al 100%, perché come menzionato da gcl1 - in questo modo il piè di pagina non è realmente un piè di pagina dello schermo - è solo un "componente aggiuntivo "alla lista.

In conclusione, per gli altri che potrebbero cercare su Google qui, ho trovato il seguente suggerimento qui: Piè di pagina fisso e sempre visibile sotto ListFragment

Prova a fare come segue, dove l'enfasi è sul pulsante (o qualsiasi elemento a piè di pagina) elencato per primo nell'XML e poi l'elenco viene aggiunto come "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>

6

Se ListView è un figlio di ListActivity:

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

(all'interno di onCreate ())


2

L'attività in cui si desidera aggiungere il piè di pagina della visualizzazione elenco e ho anche generato un evento facendo clic sul piè di pagina della visualizzazione dell'elenco.

  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>

0

In questa domanda, la migliore risposta non funziona per me. Dopo di che ho trovato questo metodo per mostrare il piè di pagina di listview,

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

E crea una nuova chiamata di layout 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>

In caso contrario il lavoro si riferisce questo articolo hear


0

puoi usare uno stackLayout, all'interno di questo layout puoi inserire un elenco in un frame, ad esempio:

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

questo è il risultato:

inserisci qui la descrizione dell'immagine

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.