2016-03-01 73 views
0
public class QRProductActivityPageObject { 


    public static void testProductDetail() throws InterruptedException { 

     ActivityTestRule<ProductInfoActivity> rule = new ActivityTestRule<ProductInfoActivity>(ProductInfoActivity.class, true, false); 
     Intent intent = new Intent(); 
     intent.setClass(getActivity(), ProductInfoActivity.class); 
     rule.launchActivity(intent); 
     Thread.sleep(2000); 
    } 
} 

上述語法顯示您無法在靜態方法中訪問getActivity()的錯誤。 但我想通過靜態方法調用這個新的Activity(ProductInfoActivity)。任何建議?在靜態方法中使用getActivity()

+1

添加上下文到您的功能:''testProductDetail(上下文CTX)''和使用''intent.setClass(CTX,ProductInfoActivity.class);'' –

回答

0

傳遞上下文當活動或片段的方法調用和靜態方法從上下文中獲取活動

public static void testProductDetail(Context context) throws InterruptedException { 

ActivityTestRule<ProductInfoActivity> rule = new ActivityTestRule<ProductInfoActivity>(ProductInfoActivity.class, true, false); 
Intent intent = new Intent(); 
Activity activity = (Activity) context; 
intent.setClass(activity , ProductInfoActivity.class); 
rule.launchActivity(intent); 
Thread.sleep(2000); 
} 

調用靜態方法在活動

testProductDetail(getApplicationContext()); 

在片段

testProductDetail(getActivity().getApplicationContext()); 
0

你可以從視圖中獲得活動:

Activity activity = (Activity)view.getContext() 

如果使用FragmentActivity(這好像是這樣),再抹上語境FragmentActivity(而不是常規的活動),並進一步您將能夠調用getSupportFragmentManager()

FragmentActivity activity = (FragmentActivity)view.getContext(); 
FragmentManager manager = activity.getSupportFragmentManager(); 

希望這個作品的您。

0

還是用我發現這裏周圍的幾個星期前的解決方案,這是相當真棒和優雅。你可以在你的APP中的任何地方使用它!

  1. 創建一個類MyApplication的(你可以以不同的命名):

    public class MyApplication extends Application { 
        private static Context context; 
    
    public void onCreate() { 
    super.onCreate(); 
    MyApplication.context = getApplicationContext(); 
    } 
    
    public static Context getAppContext() { 
    return MyApplication.context; 
        } 
    } 
    
  2. 轉到您的應用程序清單文件,並添加到<application...標籤android:name屬性以名之的價值課堂上,我們創建了:

    <application 
    android:allowBackup="true" 
    android:icon="@drawable/appico" 
    android:label="@string/app_name" 
    android:name="MyApplication" 
    

現在,您可以摹從你的應用程序的上下文,像這樣的任何類

MyApplication.getAppContext();

0

你並不需要調用getActivity()。您可以使用setClassName(String packageName, String className)方法,而不是使用需要您提供上下文對象的setClass()方法。試試這個:

Intent intent = new Intent(); 
intent.setClassName("package.name.of.your.app", 
     ProductInfoActivity.class.getName());