2015-03-10 6 views
6

Sto provando a scrivere alcuni test per una visualizzazione personalizzata, ma ho problemi a gonfiare la visualizzazione personalizzata nel mio caso di test. L'errore che ottengo èRobolectric che gonfia le visualizzazioni personalizzate per i test

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) 

Ho anche provato a fare un'attività fittizia (TestActivity) con un tag in esso per cercare di gonfiare

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

} 
} 

il layout caso

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

e test :

@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); 
} 
+0

hai trovato una soluzione per questo? –

risposta

5

OK, 1 y orecchio dopo, ma ecco la cosa strana che ha funzionato per me:

MyCustomView mView = (MyCustomView) LayoutInflater 
     .from(RuntimeEnvironment.application) 
     .inflate(R.layout.my_custom_view_layout, 
       new MyCustomView(RuntimeEnvironment.application), 
       true);