Как добавить нижний колонтитул в ListView? - PullRequest
87 голосов
/ 24 ноября 2010

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

Fig1-нижний колонтитул, как "Больше новостей"
alt text

alt text

Fig2-Добавить дополнительные 10 записей, добавленных в просмотр списка

Ответы [ 6 ]

202 голосов
/ 24 ноября 2010

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

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

Макет нижнего колонтитула может выглядеть примерно так:класс может быть:

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);
    }
}
9 голосов
/ 17 марта 2015

Ответы здесь немного устарели.Несмотря на то, что код остается прежним, в его поведении есть некоторые изменения.

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 голосов
/ 17 декабря 2013

Я знаю, что это очень старый вопрос, но я гуглил свой путь здесь и нашел, что ответ предоставлен не на 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>
5 голосов
/ 31 января 2015

Если ListView является дочерним по отношению к ListActivity:

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

(внутри onCreate ())

2 голосов
/ 15 апреля 2014

Активность, в которую вы хотите добавить нижний колонтитул списка, и я также генерирую событие при щелчке нижнего колонтитула списка просмотра.

  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 голосов
/ 27 апреля 2019

В этом вопросе лучший ответ не работает для меня. После этого я нашел этот метод для отображения списка нижнего колонтитула,

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>

Если не работа, обратитесь к этой статье услышать

...