Wie füge ich eine Fußzeile in ListView hinzu?

88

Ich entwickle eine Anwendung. In meiner Anwendung verwende ich Listview zum Anzeigen von Daten mithilfe von Dom-Parsing. Ich möchte in der Listenansicht Fußzeilen erstellen. Wenn ich auf Fußzeile klicke, werden weitere Daten zur Listenansicht hinzugefügt. Ich habe ein Bild angehängt. Ich möchte dieses Design und Prozess, siehe Bild1 und imgae2.Ich erwähne Fußzeile im roten Rechteck

Fig1-Footer wie "More News"
Alt-Text

Alt-Text

Abb2-Addieren Sie weitere 10 Datensätze, die in der Listenansicht hinzugefügt wurden

JohnNick
quelle

Antworten:

204

Erstellen Sie ein Layout für die Fußzeilenansicht, das aus Text besteht, den Sie als Fußzeile festlegen möchten, und versuchen Sie es dann

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

Das Layout für die Fußzeile könnte ungefähr so ​​aussehen:

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

Die Aktivitätsklasse könnte sein:

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
quelle
7
Das ist gut, aber was ist, wenn Sie möchten, dass die Fußzeile auf dem Bildschirm FEST ist und nicht nur sichtbar ist, wenn Sie nach unten scrollen? Und was ist, wenn die Fußzeile auch dann sichtbar sein soll, wenn die Liste leer ist? Die vollständige Frage finden Sie unter stackoverflow.com/questions/12353701/… .
gcl1
33
Ich hatte einige Probleme, damit dieser Code funktioniert, und löste sie. Hier ist, was die addFooterView () Dokumentation besagtNOTE: 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 diesem Fall ist dies keine Fußzeile, sondern nur ein gewöhnliches Element in Ihrem Layout, das sich unterhalb der Listenansicht befindet. Nur, wissen Sie, setzen Sie es unter die Listenansicht?
Davor
2
Nur ein Gruß an @demonsten: Wenn Sie setAdapter () aufrufen, bevor Sie die Ansichten hinzufügen, werden Sie eine schlechte Zeit haben.
Ben Ogorek
1
Wenn der Adapter keine Daten enthält, wird die Fußzeile nicht angehängt (angezeigt). Wie können wir also die Fußzeile anzeigen, auch wenn der Adapter keine Daten enthält? danke
Kalpesh Lakhani
10

Die Antworten hier sind etwas veraltet. Obwohl der Code derselbe bleibt, gibt es einige Änderungen im Verhalten.

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

Infos zur addFooterView()Methode

Fügen Sie eine feste Ansicht hinzu, die am Ende der Liste angezeigt wird. Wenn addFooterView()mehr als einmal aufgerufen wird, werden die Ansichten in der Reihenfolge angezeigt, in der sie hinzugefügt wurden. Mit diesem Aufruf hinzugefügte Ansichten können bei Bedarf den Fokus erhalten.

Die meisten der obigen Antworten betonen einen sehr wichtigen Punkt -

addFooterView()muss aufgerufen werden, bevor setAdapter()aufgerufen wird. Auf diese Weise kann ListView den bereitgestellten Cursor mit einem Cursor umschließen, der auch Kopf- und Fußzeilenansichten berücksichtigt.

Von Kitkat hat sich dies geändert.

Hinweis: Bei der ersten Einführung konnte diese Methode nur aufgerufen werden, bevor der Adapter mit setAdapter (ListAdapter) festgelegt wurde. Beginnend mit KITKAT kann diese Methode jederzeit aufgerufen werden. Wenn der Adapter von ListView HeaderViewListAdapter nicht erweitert, wird er mit einer unterstützenden Instanz von WrapperListAdapter umbrochen.

Dokumentation

Aniket Thakur
quelle
9

Ich weiß, dass dies eine sehr alte Frage ist, aber ich habe meinen Weg hierher gegoogelt und fand die Antwort nicht 100% zufriedenstellend, da, wie in gcl1 erwähnt, die Fußzeile nicht wirklich eine Fußzeile auf dem Bildschirm ist, sondern nur ein "Add-On" "zur Liste.

Fazit - für andere, die sich hier googeln - habe ich hier folgenden Vorschlag gefunden: Feste und immer sichtbare Fußzeile unter ListFragment

Versuchen Sie Folgendes, wobei der Schwerpunkt auf der Schaltfläche (oder einem beliebigen Fußzeilenelement) liegt, die zuerst in der XML-Datei aufgeführt ist. Anschließend wird die Liste als "layout_above" hinzugefügt:

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

Wenn die ListView ein untergeordnetes Element der ListActivity ist:

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

(in onCreate ())

Andrey
quelle
2

Die Aktivität, in der Sie Listenansicht Fußzeile hinzufügen möchten und ich habe auch ein Ereignis auf Listenansicht Fußzeile Klick generiert.

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

In dieser Frage funktioniert die beste Antwort für mich nicht. Danach habe ich diese Methode gefunden, um die Fußzeile der Listenansicht anzuzeigen.

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

Und erstellen Sie ein neues Layout, rufen Sie footer_layout auf

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

Wenn dies nicht die Arbeit bezieht diesen Artikel hören

Kusal Thiwanka
quelle
0

Sie können ein StackLayout verwenden. Innerhalb dieses Layouts können Sie einer Liste einen Frame hinzufügen, zum Beispiel:

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

das ist das Ergebnis:

Geben Sie hier die Bildbeschreibung ein

x-rw
quelle