Як додати нижній колонтитул у ListView?


88

Я розробляю програму. У своїй програмі я використовую Listview для відображення даних за допомогою синтаксичного аналізу dom, я хочу вставити нижній колонтитул у viewview, коли я натискаю нижній колонтитул, щоб додати до списку додаткові додаткові дані, я додав зображення, я хотів би, щоб дизайн та процес, будь ласка, зверніться до image1 та imgae2.Я згадую нижній колонтитул у червоному прямокутнику

Fig1-нижній колонтитул типу "Більше новин"
текст заміщення

текст заміщення

Fig2-Додавання додаткових 10 записів, доданих до списку

Відповіді:


205

Створіть макет подання нижнього колонтитула, що складається з тексту, який потрібно встановити як нижній колонтитул, а потім спробуйте

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

Макет нижнього колонтитула може бути приблизно таким:

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

Класом активності може бути:

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
Це добре, але що, якщо ви хочете, щоб нижній колонтитул був ФІКСОВАНИМ на екрані, а не видимим лише при прокрутці донизу? А що, якщо ви хочете, щоб нижній колонтитул був видимим навіть тоді, коли список ПОПУСТИЙ? Дивіться повне запитання на stackoverflow.com/questions/12353701/… .
gcl1,

33
У мене були проблеми з тим, як цей код працював, і вирішував їх. Ось що зазначено в документації 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.
демонструємо

13
@ gcl1 У цьому випадку це не нижній колонтитул, а звичайний елемент у вашому макеті, який знаходиться нижче подання списку. Просто, знаєте, помістити це нижче подання списку?
Давор

2
Просто закричте @demonsten: якщо ви зателефонуєте setAdapter () перед додаванням подань, вам буде погано.
Бен Огорек,

1
якщо в адаптері немає даних, тоді нижній колонтитул не приєднується (відображається). так як ми можемо відображати нижній колонтитул, навіть якщо в адаптері немає даних? подяка
Калпеш Лахані

10

Відповіді тут трохи застарілі. Хоча код залишається незмінним, в поведінці є деякі зміни.

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()метод

Додайте фіксований вигляд, який з’явиться внизу списку. Якщо addFooterView()викликається більше одного разу, подання відображатимуться в тому порядку, в якому вони були додані. Перегляди, додані за допомогою цього дзвінка, можуть сфокусуватись, якщо хочуть.

Більшість відповідей вище наголошують на дуже важливому моменті -

addFooterView()необхідно викликати перед викликом setAdapter(). Це так, щоб ListView міг обернути наданий курсор таким, який також враховуватиме подання верхнього та нижнього колонтитулів.

З Kitkat це змінилося.

Примітка: При першому введенні цей метод можна було викликати лише до встановлення адаптера за допомогою setAdapter (ListAdapter). Починаючи з KITKAT, цей метод можна викликати в будь-який час. Якщо адаптер ListView не поширює HeaderViewListAdapter, він буде обгорнутий допоміжним екземпляром WrapperListAdapter.

Документація


9

Я знаю, що це дуже давнє запитання, але я погуглив сюди і виявив, що надана відповідь не на 100% задовольняє, тому що, як згадував gcl1 - таким чином нижній колонтитул насправді не є нижчим колонтитулом на екрані - це просто "доповнення "до списку.

Підсумок - для інших, хто може погуглити сюди - я знайшов тут таку пропозицію: Виправлений і завжди видимий нижній колонтитул під ListFragment

Спробуйте зробити наступне, де акцент зроблений на кнопці (або будь-якому елементі нижнього колонтитула), перерахованому спочатку в XML - а потім список додається як "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

Якщо ListView є потомком ListActivity:

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

(всередині onCreate ())


2

Діяльність, в якій ви хочете додати нижній колонтитул списку, і я також створив подію за натисканням нижнього колонтитула списку.

  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

У цьому питанні найкраща відповідь не працює для мене. Після цього я знайшов цей метод, щоб показати нижній колонтитул списку,

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

І створити новий виклик макета 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>

Якщо не працює , зверніться цією статтею чують


0

ви можете використовувати stackLayout, всередині цього макета ви можете помістити в список кадр, наприклад:

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

це результат:

введіть тут опис зображення

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.