方向更改后片段中的 getActivity() 为空

Posted

技术标签:

【中文标题】方向更改后片段中的 getActivity() 为空【英文标题】:getActivity() in fragment is null after orientation change 【发布时间】:2013-12-31 06:44:34 【问题描述】:

我有关于 startActivityForResult、片段和方向更改的问题。

我从一个片段调用 startActivityForResult(),然后打开附加片段的第二个活动。在第二个活动中,当我改变方向并返回第一个活动时,会调用 onActivityResult(片段方法)。但是有一个问题,因为我有这样的东西:

public void onActivityResult(int requestCode, int resultCode, Intent data) 
    getActivity(); //here's a problem because 
    //getActivity is null but only after orientation change on second activity 

【问题讨论】:

【参考方案1】:

您需要在调用 getActivity() 之前调用所需的 super,如下所示:

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) 
    super.onActivityResult(requestCode, resultCode, data);
    getActivity();

【讨论】:

【参考方案2】:

这为我解决了:

private Activity activity;

@Override
public void onActivityCreated(@Nullable Bundle savedInstanceState) 
    super.onActivityCreated(savedInstanceState);
    this.activity = getActivity();

并在您需要的片段中的任何位置使用此活动。

【讨论】:

【参考方案3】:

所有的问题是我没有为 XML 中的片段声明 android:id。 Android 需要 ID 或 TAG 来识别存储的片段并复制其中的所有元素。所以伙计们,请记住 - 每个片段实例都需要唯一的 id 或标签!

【讨论】:

以上是关于方向更改后片段中的 getActivity() 为空的主要内容,如果未能解决你的问题,请参考以下文章

方向/配置更改后如何维护 ListView 片段状态?

DialogFragment 方向更改崩溃与 getActivity()

如何防止在方向更改时重新创建片段寻呼机中的片段?

Android getActivity() 总是在片段内返回 null

getActivity() 在片段上返回 null?

后堆栈中的配置更改片段现在正在共享 FrameLayout?