Android: Adding static header to the top of a ListActivity
findViewById()
only works to find subviews of the object View. It will not work on a layout id.
You'll have to use layout inflater to convert the xml to it's corresponding View components. Something like this:
ListView lv = getListView();LayoutInflater inflater = getLayoutInflater();View header = inflater.inflate(R.layout.header, lv, false);lv.addHeaderView(header, null, false);
I'm not sure why your code wasn't just throwing an error. findViewById()
was probably just returning null
, and so no header was added to your list.
Here is the simpliest sollution:
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" android:background="@color/background"> <include layout="@layout/actionbar"/> <ListView android:id="@+id/tasklist_TaskListView" android:layout_width="fill_parent" android:layout_height="0dip" android:layout_weight="1" android:textColor="@color/baseFont"/> <include layout="@layout/bottombar"/></LinearLayout>
or
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" android:background="@color/background"> <Button android:layout_width="fill_parent" android:layout_height="wrap_content"/> <ListView android:id="@+id/tasklist_TaskListView" android:layout_width="fill_parent" android:layout_height="0dip" android:layout_weight="1" android:textColor="@color/baseFont"/> <Button android:layout_width="fill_parent" android:layout_height="wrap_content"/></LinearLayout>
instead of button you can add another horizontal linear layout
After some research I was able to figure out that mixing TableLayout and LinearLayout within my ListActivity XML document I was able to add a header to the document. Below is my XML document if anyone is interested to see it. While synic's approach is probably the right approach after work with his solution for sometime I was unable to make it function the way I wanted it.
AuditTab.java
public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.audittab); getListView().setEmptyView(findViewById(R.id.empty));}
audittab.xml
<?xml version="1.0" encoding="utf-8"?><TableLayout android:layout_width="fill_parent" xmlns:android="http://schemas.android.com/apk/res/android" android:layout_height="fill_parent"> <TableRow android:layout_width="fill_parent" android:layout_height="fill_parent" android:layout_gravity="center_horizontal"> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="horizontal" android:layout_weight="1"> <Button android:id="@+id/btnFromDate" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="" android:layout_weight="1" /> <Button android:id="@+id/btnToDate" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="" android:layout_toRightOf="@+id/btnFromDate" android:layout_weight="1" /> <Button android:id="@+id/btnQuery" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="Query" android:layout_toRightOf="@+id/btnToDate" android:layout_weight="1" /> </LinearLayout> </TableRow> <TableRow android:layout_width="fill_parent" android:layout_height="fill_parent" android:layout_gravity="center_horizontal"> <LinearLayout android:layout_width="fill_parent" android:layout_height="fill_parent"> <ListView android:id="@android:id/list" android:layout_width="300dip" android:layout_height="330dip" android:scrollbars="none" /> <TextView android:id="@+id/empty" android:layout_width="wrap_content" android:layout_height="wrap_content" android:paddingTop="10dip" android:text="- Please select a date range and press query." /> </LinearLayout> </TableRow></TableLayout>
AuditItem.xml
<?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:orientation="horizontal" android:padding="10sp"> <TextView android:id="@+id/transactionDateLabel" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Date: " /> <TextView android:id="@+id/transactionDate" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_toRightOf="@id/transactionDateLabel" /> <TextView android:id="@+id/transactionTypeLabel" android:layout_below="@id/transactionDate" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Type: " /> <TextView android:id="@+id/transactionType" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginLeft="10dip" android:layout_below="@id/transactionDate" android:layout_toRightOf="@id/transactionTypeLabel" /> <TextView android:id="@+id/transactionAmountLabel" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginLeft="10dip" android:text="Amount: " android:layout_below="@id/transactionDate" android:layout_toRightOf="@id/transactionType" /> <TextView android:id="@+id/transactionAmount" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_below="@id/transactionDate" android:layout_toRightOf="@id/transactionAmountLabel" /> <TextView android:id="@+id/transactionCategoryLabel" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Category: " android:layout_below="@id/transactionAmountLabel" /> <TextView android:id="@+id/transactionCategory" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_below="@id/transactionAmountLabel" android:layout_toRightOf="@id/transactionCategoryLabel" /> <TextView android:id="@+id/transactionToAccountLabel" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="To Account: " android:layout_below="@id/transactionCategoryLabel" /> <TextView android:id="@+id/transactionToAccount" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_below="@+id/transactionCategoryLabel" android:layout_toRightOf="@id/transactionToAccountLabel" /> <TextView android:id="@+id/transactionFromAccountLabel" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="From Account: " android:layout_below="@id/transactionToAccountLabel" /> <TextView android:id="@+id/transactionFromAccount" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_below="@id/transactionToAccountLabel" android:layout_toRightOf="@id/transactionFromAccountLabel" /> <TextView android:id="@+id/transactionNoteLabel" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Note: " android:layout_below="@id/transactionFromAccountLabel" /> <TextView android:id="@+id/transactionNote" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_below="@id/transactionFromAccountLabel" android:layout_toRightOf="@id/transactionNoteLabel" /> <Button android:id="@+id/editTransactionBtn" android:layout_width="wrap_content" android:layout_height="40sp" android:visibility="gone" android:text="Edit" android:layout_below="@id/transactionNoteLabel"/> <Button android:id="@+id/deleteTransactionBtn" android:layout_width="wrap_content" android:layout_height="40sp" android:text="Delete" android:layout_below="@+id/transactionNoteLabel" android:visibility="gone" android:layout_toRightOf="@+id/editTransactionBtn" android:ellipsize="end"/></RelativeLayout>