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