如何在ListView中添加页脚?


88

我正在开发一个应用程序,在我的应用程序中,我正在使用Listview通过dom解析显示数据,我想在listview中添加页脚,当我单击页脚时,将更多的数据添加到列表视图中,我附加了图像,我想要这种设计并过程,请参考image1和imgae2。我在红色矩形中提到了页脚

Fig1-Footer之类的“更多新闻”
替代文字

替代文字

图2-在列表视图中添加了另外10条记录

Answers:


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

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.
2013年

13
@ gcl1在这种情况下,它不是页脚,而是布局中位于列表视图下方的普通元素。只是,将其放在列表视图下方?
Davor

2
只是对@demonsten大喊大叫:如果在添加视图之前调用setAdapter(),那将是一段糟糕的时光。
Ben Ogorek 2014年

1
如果适配器中没有数据,则说明页脚未附加(显示)。那么即使适配器中没有数据,如何显示页脚呢?谢谢
Kalpesh Lakhani 2014年

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

您要在其中添加listview页脚的活动,我也已经在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>

0

在此问题中,最佳答案对我不起作用。之后,我发现此方法可以显示listview页脚,

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>

结果是:

在此处输入图片说明

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.