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)。任何建议??
答案 0 :(得分:0)
在Activity或片段中调用方法时传递上下文,并在静态方法中从上下文获取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());
答案 1 :(得分:0)
您可以从视图中获取活动:
Activity activity = (Activity)view.getContext()
如果您使用FragmentActivity(似乎是这样),那么将Context转换为FragmentActivity(而不是常规Activity),并且您将能够调用getSupportFragmentManager()
FragmentActivity activity = (FragmentActivity)view.getContext();
FragmentManager manager = activity.getSupportFragmentManager();
希望这适合你。
答案 2 :(得分:0)
或者使用我几周前在这里找到的解决方案,它非常棒和优雅。您可以在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;
}
}
转到您的应用清单文件,并在<application...
标记中添加android:name
标记,其中包含我们创建的类名称的值:
<application
android:allowBackup="true"
android:icon="@drawable/appico"
android:label="@string/app_name"
android:name="MyApplication"
现在,您可以从任何类
获取应用的上下文MyApplication.getAppContext();
答案 3 :(得分:0)
您无需调用getActivity()。您可以使用setClassName(String packageName, String className)方法,而不是使用需要您提供上下文对象的setClass()方法。试试这个:
Intent intent = new Intent();
intent.setClassName("package.name.of.your.app",
ProductInfoActivity.class.getName());