如何在静态方法中访问getSupportFragmentManager()?

时间:2016-04-07 05:59:45

标签: android android-fragments fragmentmanager

在我的应用程序中,我有两个activities都有静态方法。我从一个单独的活动中调用这些方法。问题是在我的静态方法中,我无法访问getSupportFragmentManager();生成的错误是:

  

"无法解析方法getSupportFragmentManager()"

那我该如何解决这个问题?

2 个答案:

答案 0 :(得分:0)

您可以尝试此代码。我认为这对您有用。

FragmentManager ft = ((FragmentActivity)activity).getSupportFragmentManager();
DialogFragment newFragment = MyNotification.newInstance();
newFragment.setCancelable(false);
newFragment.show(ft, "mydialog");

答案 1 :(得分:0)

  

在我的应用程序中,我有两个活动都具有静态方法。一世   从单独的活动中调用这些方法。问题是在我   我无法访问的静态方法   getSupportFragmentManager();

在Activity中使用静态方法来访问它的活动部分通常是一种不好的做法。这是因为您不能确保处于非活动状态时所有活动部分仍然完好无损。但是您可以使用静态方法在活动中创建意图,例如:

public static Intent createIntent(Activity activity, int value) {
  Intent intent = new Intent(activity, YourActivityClass.class);
  intent.put("EXTRA_VALUE", value);
  return intent;
}

,当您尝试创建启动活动的意图时,它将隐藏所有额外的键。您可以通过以下方式调用它:

Intent intent = YourActivityClass.createIntent(this, 10);
startActivity(intent);
  

正在产生的错误是“无法解决的方法   getSupportFragmentManager()”。那么如何解决此问题?

您需要修改静态方法以直接需要FragmentActivity作为其参数。这是因为getSupportFragmentManager()是FragmentActivity的一部分。像这样:

public static void doSomething(FragmentActivity activity) {
  SupportFragmentManager manager =  activity.getSupportFragmentManager();
  ...
}

但是使用上面的代码,您无法从静态方法的活动中访问SupportFragmentManager。所以,这有点用。

或者您可以尝试:

public static SupportFragmentManager doSomething() {
  return  activity.getSupportFragmentManager();
}

但是当活动被破坏或不活动时(并非总是如此),它将提供NullPointerException。