这是从片段中获取字符串资源的正确方法吗?
Is this the right way to get string resources from within a Fragment?
在 Fragment 中读取字符串资源时,哪种方法通常更好/更安全?
这里我直接读getResources().getString()
:
public class SomeFragment extends Fragment {
public static SomeFragment newInstance() {
Bundle args = new Bundle();
SomeFragment fragment = new SomeFragment();
fragment.setArguments(args);
return fragment;
}
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
String someString = getResources().getString(R.string.my_string_id);
}
}
还是先设置上下文字段然后从中读取资源,这样更好:
public class SomeFragment extends Fragment {
private Context context;
public static SomeFragment newInstance() {
Bundle args = new Bundle();
SomeFragment fragment = new SomeFragment();
fragment.setArguments(args);
return fragment;
}
@Override
public void onAttach(Context context) {
super.onAttach(context);
this.context = context;
}
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
String someString = context.getResources().getString(R.string.my_string_id);
}
}
这些方法中的任何一个 tradeoffs/drawbacks?
我问的原因是因为有时我 运行 遇到第一种方法的空指针问题,但使用第二种方法解决了;所以我不确定使用第一个是否有问题。
第二种方法更复杂,并且与第一种方法相比没有任何价值。使用第一种方法。
两种方法都更好。这没有问题。您遇到空指针异常是因为。
当片段事务发生时,片段的生命周期开始,只有当它附加到 activity 并且到达开始时,它才会准备就绪。
有时,如果我们尝试在 fragmentManager 提交后立即访问片段的 public 方法。那么在访问context对象的时候就会运行进入空指针异常。因为它还没有完成这个过程。
所以它的开发者编写理解生命周期的代码的逻辑可以避免这些。
当Fragments在onCreate()方法时,已经有了Activity的context,所以不需要事先设置context。除非你需要做一个特定的(和普通的)上下文实现,比如解析 variables/values 从纵向屏幕模式到横向模式,我猜......
但是你从上一个上下文中获取了一个字符串资源,它已经设置好了,所以解析得很好variables/values。
在 Fragment 中读取字符串资源时,哪种方法通常更好/更安全?
这里我直接读getResources().getString()
:
public class SomeFragment extends Fragment {
public static SomeFragment newInstance() {
Bundle args = new Bundle();
SomeFragment fragment = new SomeFragment();
fragment.setArguments(args);
return fragment;
}
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
String someString = getResources().getString(R.string.my_string_id);
}
}
还是先设置上下文字段然后从中读取资源,这样更好:
public class SomeFragment extends Fragment {
private Context context;
public static SomeFragment newInstance() {
Bundle args = new Bundle();
SomeFragment fragment = new SomeFragment();
fragment.setArguments(args);
return fragment;
}
@Override
public void onAttach(Context context) {
super.onAttach(context);
this.context = context;
}
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
String someString = context.getResources().getString(R.string.my_string_id);
}
}
这些方法中的任何一个 tradeoffs/drawbacks?
我问的原因是因为有时我 运行 遇到第一种方法的空指针问题,但使用第二种方法解决了;所以我不确定使用第一个是否有问题。
第二种方法更复杂,并且与第一种方法相比没有任何价值。使用第一种方法。
两种方法都更好。这没有问题。您遇到空指针异常是因为。
当片段事务发生时,片段的生命周期开始,只有当它附加到 activity 并且到达开始时,它才会准备就绪。
有时,如果我们尝试在 fragmentManager 提交后立即访问片段的 public 方法。那么在访问context对象的时候就会运行进入空指针异常。因为它还没有完成这个过程。
所以它的开发者编写理解生命周期的代码的逻辑可以避免这些。
当Fragments在onCreate()方法时,已经有了Activity的context,所以不需要事先设置context。除非你需要做一个特定的(和普通的)上下文实现,比如解析 variables/values 从纵向屏幕模式到横向模式,我猜......
但是你从上一个上下文中获取了一个字符串资源,它已经设置好了,所以解析得很好variables/values。