ListView'da altbilgi nasıl eklenir?


88

Bir uygulama geliştiriyorum, Uygulamamda, dom ayrıştırmayı kullanarak verileri görüntülemek için Listview kullanıyorum, liste görünümünde altbilgi almak istiyorum, altbilgiye tıkladığımda ek veri listeye daha fazla veri ekle, görüntü ekledim, bu tasarımı istiyorum ve işlem, lütfen image1 ve imgae2'ye bakın. altbilgiden kırmızı dikdörtgenle bahsediyorum

Fig1-Footer gibi "Daha Fazla Haber"
alternatif metin

alternatif metin

Şekil 2 - Liste görünümüne eklenen ek 10 kayıt ekle

Yanıtlar:


206

Altbilgi olarak ayarlamak istediğiniz metinden oluşan bir altbilgi görünümü düzeni oluşturun ve ardından deneyin.

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

Altbilgi düzeni şunun gibi bir şey olabilir:

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

Aktivite sınıfı şunlar olabilir:

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
Bu iyidir, ancak ya altbilginin yalnızca aşağıya kaydırıldığında görünmek yerine ekranda SABİT olmasını istiyorsanız? Peki ya liste BOŞ olsa bile altbilginin görünür olmasını istiyorsanız? Stackoverflow.com/questions/12353701/… adresindeki tam soruya bakın .
gcl1

33
Bu kodu çalıştırırken bazı sorunlar yaşadım ve çözdüm. AddFooterView () dokümantasyonunda belirtilenlerNOTE: 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 Bu durumda bu bir altbilgi değildir, sadece mizanpajınızda liste görünümünün altında olan sıradan bir öğe. Sadece, bilirsiniz, liste görünümünün altına koyun?
Davor

2
@Demonsten'e bir seslenmeniz yeterli: görünümleri eklemeden önce setAdapter () 'ı çağırırsanız, kötü bir zaman geçireceksiniz.
Ben Ogorek

1
bağdaştırıcıda veri yoksa altbilgi eklenmiyor (gösteriliyor). peki adaptörde veri olmasa bile nasıl altbilgi görüntüleyebiliriz? teşekkürler
Kalpesh Lakhani

10

Buradaki cevaplar biraz modası geçmiş. Kod aynı kalsa da davranışta bazı değişiklikler vardır.

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

addFooterView()Yöntem hakkında bilgi

Listenin en altında görünmesi için sabit bir görünüm ekleyin. Birden addFooterView()fazla çağrılırsa, görünümler eklendikleri sırayla görünür. Bu çağrı kullanılarak eklenen görünümler, isterlerse odaklanabilir.

Yukarıdaki cevapların çoğu çok önemli bir noktayı vurgulamaktadır -

addFooterView()setAdapter()Çağrılmadan önce çağrılmalıdır . Bu, ListView sağlanan imleci üstbilgi ve altbilgi görünümlerini de hesaba katacak bir imleci kaydırabilmesidir.

Kitkat'tan bu değişti.

Not: İlk kullanıma sunulduğunda, bu yöntem yalnızca adaptör setAdapter (ListAdapter) ile ayarlanmadan önce çağrılabilir. KITKAT ile başlayarak, bu yöntem herhangi bir zamanda çağrılabilir. ListView'ın bağdaştırıcısı HeaderViewListAdapter'ı genişletmezse, destekleyen bir WrapperListAdapter örneği ile sarmalanır.

Dokümantasyon


9

Bunun çok eski bir soru olduğunu biliyorum, ancak burada kendi yoluma baktım ve verilen cevabı% 100 tatmin edici bulmadım, çünkü gcl1'in de bahsettiği gibi - bu şekilde altbilgi gerçekten ekranın altbilgisi değil - sadece bir "eklenti "listeye.

Sonuç olarak - burada kendi yolunu Google'da bulabilecek diğer kişiler için - burada şu öneriyi buldum: ListFragment'ın altında sabit ve her zaman görünür altbilgi

Öncelikle XML'de listelenen düğmenin (veya herhangi bir alt bilgi öğesinin) vurgunun olduğu ve ardından listenin "layout_above" olarak eklendiği aşağıdaki gibi yapmayı deneyin:

<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

ListView, ListActivity'nin alt öğesi ise:

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

(onCreate () içinde)


2

Listview altbilgisini eklemek istediğiniz ve ayrıca listview altbilgisi tıklatıldığında bir olay oluşturduğum etkinlik.

  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

Bu soruda en iyi cevap benim için işe yaramıyor. Bundan sonra listview alt bilgisini göstermek için bu yöntemi buldum,

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

Ve yeni düzen çağrısı oluştur 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>

Değil iş varsa bu makalede bakın duymak


0

bir stackLayout kullanabilirsiniz, bu düzenin içine bir liste bir çerçeve koyabilirsiniz, örneğin:

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

sonuç bu:

görüntü açıklamasını buraya girin

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.