Bagaimana cara menambahkan footer di ListView?

88

Saya sedang mengembangkan aplikasi, Dalam aplikasi saya, saya menggunakan Listview untuk menampilkan data menggunakan parsing dom, saya ingin footer di listview, ketika saya mengklik footer tambahan lebih banyak data tambahkan ke tampilan daftar, saya lampirkan gambar, saya ingin desain itu dan proses, silakan lihat gambar1 dan imgae2. Saya menyebutkan footer dalam kotak merah

Fig1-Footer seperti "More News"
teks alt

teks alt

Fig2-Tambahkan 10 record tambahan ditambahkan dalam listview

JohnNick
sumber

Jawaban:

206

Buat tata letak tampilan footer yang terdiri dari teks yang ingin Anda tetapkan sebagai footer, lalu coba

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

Tata letak untuk footer bisa seperti ini:

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

Kelas aktivitas dapat berupa:

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
sumber
7
Ini bagus, tetapi bagaimana jika Anda ingin footer TETAP di layar, daripada hanya terlihat saat di-scroll ke bawah? Dan bagaimana jika Anda ingin footer tetap terlihat meskipun daftarnya KOSONG? Lihat pertanyaan lengkap di stackoverflow.com/questions/12353701/… .
gcl1
33
Saya memiliki beberapa masalah dalam membuat kode ini berfungsi dan menyelesaikannya. Inilah yang dinyatakan oleh dokumentasi 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.
didemonstrasikan
13
@ gcl1 Jika itu bukan footer, hanya elemen biasa dalam tata letak Anda yang ada di bawah tampilan daftar. Hanya, tahukah Anda, taruh di bawah tampilan daftar?
Davor
2
Cukup teriak ke @demonsten: jika Anda memanggil setAdapter () sebelum menambahkan tampilan, Anda akan mendapatkan waktu yang buruk.
Ben Ogorek
1
jika tidak ada data di adaptor maka footer tidak terpasang (muncul). jadi bagaimana kita bisa menampilkan footer meskipun tidak ada data di adaptor? terima kasih
Kalpesh Lakhani
10

Jawaban di sini agak ketinggalan jaman. Meskipun kodenya tetap sama, ada beberapa perubahan dalam perilaku.

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

Info tentang addFooterView()metode

Tambahkan tampilan tetap agar muncul di bagian bawah daftar. Jika addFooterView()dipanggil lebih dari sekali, tampilan akan muncul sesuai urutan penambahannya. Tampilan yang ditambahkan menggunakan panggilan ini dapat difokuskan jika diinginkan.

Sebagian besar jawaban di atas menekankan poin yang sangat penting -

addFooterView()harus dipanggil sebelum memanggil setAdapter(). Ini agar ListView dapat membungkus kursor yang disediakan dengan kursor yang juga akan menjelaskan tampilan header dan footer.

Dari Kitkat ini telah berubah.

Catatan: Saat pertama kali diperkenalkan, metode ini hanya bisa dipanggil sebelum menyetel adaptor dengan setAdapter (ListAdapter). Dimulai dengan KITKAT, metode ini dapat dipanggil kapan saja. Jika adaptor ListView tidak memperluas HeaderViewListAdapter, adaptor tersebut akan dibungkus dengan instance pendukung dari WrapperListAdapter.

Dokumentasi

Aniket Thakur
sumber
9

Saya tahu ini adalah pertanyaan yang sangat lama, tetapi saya mencari cara saya di sini dan menemukan jawaban yang diberikan tidak 100% memuaskan, karena seperti yang disebutkan gcl1 - dengan cara ini footer sebenarnya bukan footer ke layar - ini hanya "add-on "ke daftar.

Intinya - untuk orang lain yang mungkin mencari di Google dengan cara mereka di sini - Saya menemukan saran berikut di sini: Footer tetap dan selalu terlihat di bawah ListFragment

Coba lakukan hal berikut, dengan penekanan pada tombol (atau elemen footer apa pun) yang tercantum pertama kali dalam XML - lalu daftar tersebut ditambahkan sebagai "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
sumber
6

Jika ListView adalah anak dari ListActivity:

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

(di dalam onCreate ())

Andrew
sumber
2

Aktivitas di mana Anda ingin menambahkan footer listview dan saya juga menghasilkan acara di klik footer listview.

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

Dalam Pertanyaan ini, jawaban terbaik tidak berhasil untuk saya. Setelah itu saya menemukan metode ini untuk menampilkan footer listview,

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

Dan buat layout baru, panggil 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>

Jika tidak berhasil merujuk artikel ini mendengar

Kusal Thiwanka
sumber
0

Anda dapat menggunakan stackLayout, di dalam tata letak ini Anda dapat meletakkan bingkai pada daftar, misalnya:

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

ini hasilnya:

masukkan deskripsi gambar di sini

x-rw
sumber