I am trying to write some tests for a user view, but I am having problems with inflating a user view in my test case. The error I get is this
android.view.InflateException: <merge /> can be used only with a valid ViewGroup root and attachToRoot=true at android.view.LayoutInflater.inflate(LayoutInflater.java:458) at android.view.LayoutInflater.inflate(LayoutInflater.java:397) at android.view.LayoutInflater.inflate(LayoutInflater.java:353) at com.androidas.models.ui.order.MyLocationViewTest.setUp(MyLocationViewTest.java:45)
I even tried to do a dummy activity (TestActivity) with a tag in it to try to inflate it
public class MyLocationView extends RelativeLayout { private TextView mTextEta; private TextView mTextOnTime; private Date mMeetTime; private CalendarManager mCalendarManager; public MyLocationView(Context context) { this(context, null); } public MyLocationView(Context context, AttributeSet attrs) { this(context, attrs, 0); } public MyLocationView(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); LayoutInflater.from(context) .inflate(R.layout.v_mylocation, this, true); mTextEta = (TextView) findViewById(R.id.order_statusTracking_txt_myEta); mTextOnTime = (TextView) findViewById(R.id.order_statusTracking_txt_myDelay); } }
layout
<?xml version="1.0" encoding="utf-8"?> <merge xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" > <ImageView android:id="@+id/order_statusTracking_img_walking" android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/ic_walk" /> <TextView android:id="@+id/order_statusTracking_txt_myEta" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginLeft="@dimen/spacing_small" android:layout_toRightOf="@+id/order_statusTracking_img_walking" android:layout_toEndOf="@+id/order_statusTracking_img_walking" android:gravity="center_vertical" tools:text="Arrive in 7min" style="@style/HeaderText" /> <TextView android:id="@+id/order_statusTracking_txt_myDelay" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_alignLeft="@+id/order_statusTracking_txt_myEta" android:layout_below="@+id/order_statusTracking_txt_myEta" android:layout_marginTop="@dimen/spacing_normal" tools:text="On Time" style="@style/InfoText.Black" /> </merge>
and test case:
@RunWith(RobolectricTestRunner.class) @Config(emulateSdk = 18) public class MyLocationViewTest { MyLocationView mLocation; TextView mTextDelay; Trip mTrip; CalendarManager mCalendarManager; Date meetupTime; @Before public void setUp() { Activity activity = Robolectric.buildActivity(TestActivity.class).create().get(); mLocation = (MyLocationView) LayoutInflater.from(activity).inflate(R.layout.v_mylocation, null); mTextDelay = (TextView) mLocation.findViewById(R.id.order_statusTracking_txt_myDelay); }
source share