导致内存问题的每个片段的工具栏

时间:2018-03-09 17:42:43

标签: android android-fragments android-activity android-toolbar

我已经为我的应用中的每个片段提供了工具栏。

以下是要设置工具栏的片段中的代码。 setToolbarActivity中使用接口从片段调用的方法。

@Override
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
    super.onViewCreated(view, savedInstanceState);
    Toolbar toolbar = view.findViewById(R.id.toolbar);
    if (mListener != null) {
        mListener.setToolbar(toolbar);
    }
}

现在因为我没有在片段被破坏时删除工具栏,所以导致内存泄漏。我想知道在哪里删除工具栏片段以及如何删除。

知道我应该在哪里以及如何发布片段中的工具栏?

根据我之前提出的问题Can I have toolbar for each fragment separately. How to handle navigation drawer我被告知我可以在每个片段中都有一个工具栏,但现在我面临内存泄漏。

3 个答案:

答案 0 :(得分:5)

不是分别为每个片段创建工具栏,而是在这些片段的父活动中创建一个工具栏。

如果您担心每个片段中的菜单选项,则无需担心。只需在每个片段的setHasOptionsMenu(true)方法内写onCreateView。同时覆盖每个片段中的onCreateOptionsMenuonOptionsItemSelected。 活动工具栏将自动反映菜单选项中的更改。

注意:始终从Android Studio提供的模板生成活动。它将为您节省时间和精力。您可以随时删除您认为不必要的所有锅炉板代码。

答案 1 :(得分:2)

解决方案是不设置活动的工具栏。但如果您愿意,可以在Fragment.onStop()

中将其删除

如果您的工具栏看起来相同(按组件划分),请在活动中使用Toolbar,并在每个片段的onAttach()上传递工具栏标题,hasBack和...等参数您的活动,并让活动处理显示它。 这样你就不会有内存泄漏,并且每次附加一个片段时,工具栏都会相应地更新。

我建议您创建一个类似ToolbarInteractor的界面,并使用两种方法setToolbar(title:String,hasBack:Boolean,...)resetToolbar()让您的活动实现它。然后在您的片段中,调用((ToolbarInteractor) getActivity()).setToolbar(...)。同样适用于reset()

答案 2 :(得分:0)

是的,如上面的答案,您可以拥有一个父活动,您可以在其中使用工具栏实现,并且碎片也在同一个实现。 现在要自定义工具栏标题,您可以实现方法界面并可以相应地使用。

简要说明&您可以使用其他选项LINK