2014-07-23 3 views
0

커스텀 토스트를 표시하려고하지만 애플리케이션 자체가 아닌 자동화 된 테스트에서 표시하려고합니다.Android 테스팅 : 계기판에서 사용자 토스트 유입 및 표시

레이아웃 인플레이션이 작동하지 않습니다. 보기를 확대하고 테스트 프로젝트에서 표시하고 표시 할 수 있습니까?

final Activity targetActivity = Solo.getCurrentActivity(); // Using Robotium to get current displayed Activity 

LayoutInflater inflater = targetActivity.getLayoutInflater();       
View layout = inflater.inflate(test.my.package.R.layout.my_custom_toast, null); // resource is located in test project 
TextView text = (TextView) layout.findViewById(test.my.package.R.id.textToShow); // textview within the layout 

text.setText("Hello from Instrumentation"); // here I get the NullPointerException 

Toast toast = new Toast(targetActivity); 
toast.setGravity(Gravity.CENTER_VERTICAL, 0, 0); 
toast.setDuration(Toast.LENGTH_LONG); 
toast.setView(layout); 
toast.show(); 

솔루션

를 참조하지 않고 새로운 LayoutInflater 받기 :

final Activity targetActivity = Solo.getCurrentActivity(); // Using Robotium to get current displayed Activity 
Toast.makeText(targetActivity, "Hello from Instrumentation", Toast.LENGTH_SHORT).show(); 

무엇을 작동하지 않습니다는 다음과 같다 : 작업을 수행 무엇

는 표준 토스트입니다 targetActivity

final Activity targetActivity = Solo.getCurrentActivity(); // Using Robotium to get current displayed Activity 

// *** !!! *** 
LayoutInflater inflater = 
(LayoutInflater) getInstrumentation().getContext().getSystemService (Context.LAYOUT_INFLATER_SERVICE); 
// getContext() , NOT getTargetContext() 

View layout = inflater.inflate(test.my.package.R.layout.my_custom_toast, null); // resource is located in test project 
TextView text = (TextView) layout.findViewById(test.my.package.R.id.textToShow); // textview within the layout 

text.setText("Hello from Instrumentation"); // here I get the NullPointerException 

Toast toast = new Toast(targetActivity); 
toast.setGravity(Gravity.CENTER_VERTICAL, 0, 0); 
toast.setDuration(Toast.LENGTH_LONG); 
toast.setView(layout); 
toast.show(); 

답변

1

안녕을 사용하여 아래 코드 :

import android.content.Context; 
import android.view.Gravity; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.widget.TextView; 
import android.widget.Toast; 
import com.example.R; 

public class DoToast extends Toast { 

    /** The Constant TOAST_DURATION. */ 
    private static final int TOAST_DURATION=4000; 

    /** The layout. */ 
    View layout; 

    /** 
    * Instantiates a new do toast. 
    * 
    * @param context the context 
    * @param text the text 
    */ 
    public DoToast(Context context, CharSequence text) { 
     super(context); 

     LayoutInflater inflater = (LayoutInflater) context.getSystemService (Context.LAYOUT_INFLATER_SERVICE); 
     layout = inflater.inflate(R.layout.toast, null); 
     TextView textView = (TextView) layout.findViewById(R.id.text); 
     textView.setText(text); 
     DoToast.this.setGravity(Gravity.CENTER_VERTICAL, 0, 0); 
     DoToast.this.setDuration(TOAST_DURATION); 
     DoToast.this.setView(layout); 
     DoToast.this.show(); 
    } 
} 

레이아웃 XML :

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/toast_layout_root" 
    android:orientation="horizontal" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:padding="8dp" 
    android:layout_marginLeft="10dp" 
    android:layout_marginRight="10dp" 
    android:background="@drawable/toast_bg"> 

    <TextView 
     android:id="@+id/text" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:padding="5dp" 
     android:textColor="#000000" /> 
</LinearLayout> 

그리고 스타일 파일 :

<?xml version="1.0" encoding="utf-8"?> 
<shape xmlns:android="http://schemas.android.com/apk/res/android" 
    android:shape="rectangle" > 
    <gradient 
     android:angle="90" 
     android:endColor="#ffffff" 
     android:startColor="#F2F2F2" 
     android:type="linear" /> 
    <stroke 
     android:width="3dp" 
     android:color="#000000" /> 
</shape> 

당신은 사용 후 토스트를 표시해야하는 경우 아래 라인 :

new DoToast(this,"Testing"); 

당신이 어떤 질문이 있으면 알려주세요 ..

1

을 나는 문제가, 당신이 테스트 응용 프로그램 R 파일에서 축배를 보여 주려하지만 애플리케이션 컨텍스트를 통해를 사용하는 컨텍스트와 함께 할 것입니다 생각 액티비티, 당신이해야 할 일은 계측에서 테스트 컨텍스트를 얻은 다음 다음을 사용하여 레이아웃 인스 터레이터를 만드는 것입니다.

Context context = instrumentation.getContext(); 
LayoutInflater li = LayoutInflater.from(context); 
+0

감사합니다. Inflater를 지금 다른 방법으로 얻지 만 이것도 잘 작동합니다. – IHeartAndroid