在静态方法中使用getActivity()

时间:2016-03-01 10:17:01

标签: java android static-methods

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)。任何建议??

4 个答案:

答案 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的任何地方使用它!

  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"
    
  3. 现在,您可以从任何类

    获取应用的上下文
      

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