[英]Making use of getActivity() in a static method
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)。任何建議嗎?
在Activity或fragment中調用方法時傳遞上下文,並在靜態方法中從上下文獲取Activity
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());
您可以從視圖中獲取活動:
Activity activity = (Activity)view.getContext()
如果您使用FragmentActivity(似乎是這樣),則將Context強制轉換為FragmentActivity(而不是常規的Activity),然后您將能夠調用getSupportFragmentManager()
FragmentActivity activity = (FragmentActivity)view.getContext();
FragmentManager manager = activity.getSupportFragmentManager();
希望這對您有用。
或者使用幾周前在這里找到的解決方案,它非常棒且優雅。 您將可以在APP的任何位置使用它!
創建一個類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; } }
轉到您的應用清單文件,然后將android:name
屬性添加到<application...
標簽中,並添加我們創建的類的名稱:
<application android:allowBackup="true" android:icon="@drawable/appico" android:label="@string/app_name" android:name="MyApplication"
現在,您可以從類似的任何類中獲取應用程序的上下文
MyApplication.getAppContext();
您不需要調用getActivity()。 可以使用setClassName(String packageName,String className)方法來代替使用需要提供上下文對象的setClass()方法。 嘗試這個:
Intent intent = new Intent();
intent.setClassName("package.name.of.your.app",
ProductInfoActivity.class.getName());
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.