“这是我下面的代码和图片链接”
MyFragment newFragment = new MyFragment();
FragmentTransaction ft = getActivity().getSupportFragmentManager().beginTransaction();
ft.setCustomAnimations(android.R.anim.slide_in_left, android.R.anim.slide_out_right);
ft.replace(R.id.guide_frame_container, newFragment)
.addToBackStack(null)
.commit();
答案 0 :(得分:0)
试试此代码
MyFragment newFragment = new MyFragment();
getSupportFragmentManager().beginTransaction()
.setCustomAnimations(android.R.anim.slide_in_left,android.R.anim.slide_out_right)
.replace(R.id.guide_frame_container, newFragment)
.addToBackStack("MyFragment")
.commit();
答案 1 :(得分:0)
这是Android Studio警告,没有错误。但你应该关心它!
getActivity()
无法保证始终返回活动。例如,当片段被创建但尚未附加时,即getActivity()
在构造函数中调用时将始终返回null。 getSupportFragmentManager()
也是如此,它也需要连接fragement,以获得相应的片段主机。
所以,你必须确保你只在一个众所周知的上下文中调用这些函数,保证片段被附加(比如在onAttached()
函数中),或者你必须包含调用空检查
此外,绝对不清楚,你在哪里调用这些功能。我假设你尝试调用那些为你创建片段的static Fragment newInstance()
函数内部的函数。但是,你永远不应该尝试在那里附加片段。它应该由主持人活动完成。
答案 2 :(得分:0)
当前,此方法已被弃用,但是此代码行删除了该警告。 覆盖片段中的onAttach。然后在上面以这样的Activity类实例。
private Activity mActivity;
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
// your code
}
@Override
public void onAttach(@NonNull Activity activity) {
super.onAttach(activity);
mActivity = activity;
}
现在使用mActivity代替getActivity()
答案 3 :(得分:0)
为了防止出现此警告,我通常使用以下模式:
Objects.requireNonNull(getActivity(), "<some message describing what went wrong>")
这将引发异常,使您可以更好地了解刚刚发生的事情。
这是一个更长的例子:
Objects.requireNonNull(getActivity(), "Activity not available in traffic control fragment")
.getSupportFragmentManager().addOnBackStackChangedListener(() -> {
setRepeatButtonText(getView());
setSwitchButtonState(switchButton);
if (mainActivity.getTabIndex() == 2 && getFragmentManager()!=null && getFragmentManager().getBackStackEntryCount() == 0){
mainActivity.setDateOnABar(getString(org.brahmakumaris.beezone.R.string.traffic_control));
}
else if (mainActivity.getTabIndex() == 2 && getFragmentManager()!=null && getFragmentManager().getBackStackEntryCount() == 1){
mainActivity.setDailyOnABar(getString(org.brahmakumaris.beezone.R.string.traffic_control), false);
}
});