How to add a footer in ListView?

2018-12-31 13:47发布

问题:

I am developing an application,In my application,I am using Listview for displaying data using dom parsing,I want to footer in listview,when i click footer additional more data add to list view,I attached image,i would like that design and process,please refer image1 and imgae2.I mention footer in red rectangle

Fig1-Footer like \"More News\"
\"alt

\"alt

Fig2-Add additional 10 record added in listview

回答1:

Create a footer view layout consisting of text that you want to set as footer and then try

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

Layout for footer could be something like this:

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

The activity class could be:

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


回答2:

I know this is a very old question, but I googled my way here and found the answer provided not 100% satisfying, because as gcl1 mentioned - this way the footer is not really a footer to the screen - it\'s just an \"add-on\" to the list.

Bottom line - for others who may google their way here - I found the following suggestion here: Fixed and always visible footer below ListFragment

Try doing as follows, where the emphasis is on the button (or any footer element) listed first in the XML - and then the list is added as \"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>


回答3:

Answers here are a bit outdated. Though the code remains the same there are some changes in the behavior.

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

Info about addFooterView() method

Add a fixed view to appear at the bottom of the list. If addFooterView() is called more than once, the views will appear in the order they were added. Views added using this call can take focus if they want.

Most of the answers above stress very important point -

addFooterView() must be called before calling setAdapter().This is so ListView can wrap the supplied cursor with one that will also account for header and footer views.

From Kitkat this has changed.

Note: When first introduced, this method could only be called before setting the adapter with setAdapter(ListAdapter). Starting with KITKAT, this method may be called at any time. If the ListView\'s adapter does not extend HeaderViewListAdapter, it will be wrapped with a supporting instance of WrapperListAdapter.

Documentation



回答4:

If the ListView is a child of the ListActivity:

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

(inside onCreate())



回答5:

The activity in which you want to add listview footer and i have also generate an event on listview footer click.

  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>