检查哪个Activity加载片段

时间:2017-03-13 19:01:50

标签: android android-fragments

有没有办法检查哪个活动从片段中加载片段?我有一个用户配置文件片段,它从2个不同的活动加载,但只有一个传递了一个值,所以当从未通过值的活动加载片段时从包中获取值时会抛出nullpointerexception。或者是否有更好的方法将值传递给片段,以便片段只有在从此特定活动加载时才能获取值?

2 个答案:

答案 0 :(得分:4)

您只需在片段中执行此操作:

if(getActivity() instanceof SomeActivity){
//do something
}

如果你确定它是哪个活动(然后从该活动中调用方法),你也可以投出getActivity()电话。

答案 1 :(得分:1)

您可以定义两个静态方法(也称为静态工厂方法),它返回您的Fragment实例,其中包含您希望通过包传递的参数,如下面的代码:

private static final String BUNDLE_VALUE_KEY = "value";

@NonNull
public static YourFragment newInstance() {
   return new YourFragment();
}

@NonNull
public static YourFragment newInstance(@NonNull String yourValue) {
   final YourFragment instance = new YourFragment();
   final Bundle args = new Bundle();
   args.putString(BUNDLE_VALUE_KEY,yourValue);
   instance.setArguments(args);
   return instance;
}

在您希望传递值的Activity中,您可以使用:

final YourFragment fragment = YourFragment.newInstance(value);
getSupportFragmentManager().beginTransaction()
          .replace(R.id.framelayout, fragment)
          .commit();

在其他Activity中,您可以使用:

final YourFragment fragment = YourFragment.newInstance();
getSupportFragmentManager().beginTransaction()
        .replace(R.id.framelayout, fragment)
        .commit();

在您onCreate的{​​{1}}方法中,您可以检查参数并初始化您的值,如下面的代码:

Fragment

因此,如果您的final Bundle args = getArguments(); if(args != null){ yourValue = args.getString(BUNDLE_VALUE_KEY,null); } 附加到传递数据的Fragment,那么您将拥有它。如果Activity附加到其他Fragment,您将拥有初始值(在示例中为Activity

或者您可以查看null附加Activity的实例。 (不是最佳做法)

Fragment