modified ListView's findViewById method to include the header and footer views
diff --git a/src/main/java/com/xtremelabs/robolectric/shadows/ShadowListView.java b/src/main/java/com/xtremelabs/robolectric/shadows/ShadowListView.java
index 2b99402..e61f821 100644
--- a/src/main/java/com/xtremelabs/robolectric/shadows/ShadowListView.java
+++ b/src/main/java/com/xtremelabs/robolectric/shadows/ShadowListView.java
@@ -1,17 +1,18 @@
 package com.xtremelabs.robolectric.shadows;
 
-import android.view.View;
-import android.widget.AdapterView;
-import android.widget.ListAdapter;
-import android.widget.ListView;
-import com.xtremelabs.robolectric.internal.Implementation;
-import com.xtremelabs.robolectric.internal.Implements;
-import com.xtremelabs.robolectric.internal.RealObject;
+import static com.xtremelabs.robolectric.Robolectric.shadowOf;
 
 import java.util.ArrayList;
 import java.util.List;
 
-import static com.xtremelabs.robolectric.Robolectric.shadowOf;
+import android.view.View;
+import android.widget.AdapterView;
+import android.widget.ListAdapter;
+import android.widget.ListView;
+
+import com.xtremelabs.robolectric.internal.Implementation;
+import com.xtremelabs.robolectric.internal.Implements;
+import com.xtremelabs.robolectric.internal.RealObject;
 
 @SuppressWarnings({"UnusedDeclaration"})
 @Implements(ListView.class)
@@ -22,6 +23,34 @@
     private List<View> headerViews = new ArrayList<View>();
     private List<View> footerViews = new ArrayList<View>();
 
+    
+    @Implementation
+    @Override
+    public View findViewById(int id) {
+    	View child = super.findViewById( id );
+    	if( child == null ) {
+    		child = findView( headerViews, id );
+    		
+    		if( child == null ) {
+    			child = findView( footerViews, id );
+    		}
+    	}
+    	return child;
+    }
+    
+    private View findView( List<View> views, int viewId ) {
+    	
+    	View child = null;
+		for( View v : views ) {
+			child = v.findViewById( viewId );
+			if( child != null ) {
+				break;
+			}
+		}    	
+    	return child;
+    }
+    
+    
     @Implementation
     public void setItemsCanFocus(boolean itemsCanFocus) {
         this.itemsCanFocus = itemsCanFocus;
diff --git a/src/test/java/com/xtremelabs/robolectric/shadows/ListViewTest.java b/src/test/java/com/xtremelabs/robolectric/shadows/ListViewTest.java
index a7d4b71..039d2dc 100644
--- a/src/test/java/com/xtremelabs/robolectric/shadows/ListViewTest.java
+++ b/src/test/java/com/xtremelabs/robolectric/shadows/ListViewTest.java
@@ -18,6 +18,7 @@
 import static java.util.Arrays.asList;
 import static org.hamcrest.CoreMatchers.equalTo;
 import static org.hamcrest.CoreMatchers.nullValue;
+import static org.hamcrest.CoreMatchers.notNullValue;
 import static org.hamcrest.CoreMatchers.sameInstance;
 import static org.junit.Assert.assertThat;
 import static org.junit.Assert.fail;
@@ -75,9 +76,13 @@
     @Test
     public void addHeaderView_ShouldRecordHeaders() throws Exception {
         View view0 = new View(null);
+        view0.setId( 0 );
         View view1 = new View(null);
+        view1.setId( 1 );
         View view2 = new View(null);
+        view2.setId( 2 );
         View view3 = new View(null);
+        view3.setId( 3 );
         listView.addHeaderView(view0);
         listView.addHeaderView(view1);
         listView.addHeaderView( view2, null, false );
@@ -87,6 +92,11 @@
         assertThat(shadowOf(listView).getHeaderViews().get(1), sameInstance(view1));
         assertThat(shadowOf(listView).getHeaderViews().get(2), sameInstance(view2));
         assertThat(shadowOf(listView).getHeaderViews().get(3), sameInstance(view3));
+
+        assertThat( listView.findViewById( 0 ), notNullValue() );
+        assertThat( listView.findViewById( 1 ), notNullValue() );
+        assertThat( listView.findViewById( 2 ), notNullValue() );
+        assertThat( listView.findViewById( 3 ), notNullValue() );
     }
 
     @Test