如何在ListView中添加页脚?

Joh*_*ick 87 android footer android-listview

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

Fig1-Footer喜欢"更多新闻"
替代文字

替代文字

图2 - 在listview中添加额外的10条记录

Sha*_*een 203

创建一个页脚视图布局,其中包含要设置为页脚的文本,然后尝试

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

页脚的布局可能是这样的:

<?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> 
Run Code Online (Sandbox Code Playgroud)

活动类可以是:

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);
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 我在使这段代码工作并解决它们时遇到了一些问题.以下是addFooterView()文档声明的内容`注意:在调用setAdapter之前调用它.这是因此ListView可以将提供的光标包装起来,也可以考虑页眉和页脚视图 (32认同)
  • @ gcl1在这种情况下,它不是页脚,只是布局中位于列表视图下方的普通元素.只是,你知道,把它放在列表视图下面吗? (13认同)
  • 这很好,但如果您希望页脚在屏幕上固定,而不是仅在滚动到底部时可见,该怎么办?如果你希望即使列表是EMPTY时页脚也可见,该怎么办?请参阅http://stackoverflow.com/questions/12353701/fixed-and-always-visible-footer-below-listfragment上的完整问题. (6认同)
  • 只是向@demonsten大喊:如果你在添加视图之前调用setAdapter(),你将会遇到糟糕的时间. (2认同)

Ofe*_*ndo 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>
Run Code Online (Sandbox Code Playgroud)


Ani*_*kur 9

这里的答案有点过时了.虽然代码保持不变,但行为有一些变化.

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)));
    }
}
Run Code Online (Sandbox Code Playgroud)

关于addFooterView()方法的信息

添加固定视图以显示在列表的底部.如果addFooterView()多次调用,则视图将按添加顺序显示.使用此调用添加的视图可以在需要时获得焦点.

上面的大多数答案都非常重要 -

addFooterView()必须在调用之前调用setAdapter().这样ListView可以将提供的光标包装起来,同时也会考虑页眉和页脚视图.

来自Kitkat的情况发生了变化.

注意:首次引入时,只能在使用setAdapter(ListAdapter)设置适配器之前调用此方法.从KITKAT开始,可以随时调用此方法.如果ListView的适配器没有扩展HeaderViewListAdapter,它将被WrapperListAdapter的支持实例包装.

文档


And*_*rey 5

如果ListView是ListActivity的子级:

getListView().addFooterView(
    getLayoutInflater().inflate(R.layout.footer_view, null)
);
Run Code Online (Sandbox Code Playgroud)

(在onCreate()里面)