我已经为我的应用中的每个片段提供了工具栏。
以下是要设置工具栏的片段中的代码。 setToolbar
是Activity
中使用接口从片段调用的方法。
@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我被告知我可以在每个片段中都有一个工具栏,但现在我面临内存泄漏。
答案 0 :(得分:5)
不是分别为每个片段创建工具栏,而是在这些片段的父活动中创建一个工具栏。
如果您担心每个片段中的菜单选项,则无需担心。只需在每个片段的setHasOptionsMenu(true)
方法内写onCreateView
。同时覆盖每个片段中的onCreateOptionsMenu
和onOptionsItemSelected
。
活动工具栏将自动反映菜单选项中的更改。
注意:始终从Android Studio提供的模板生成活动。它将为您节省时间和精力。您可以随时删除您认为不必要的所有锅炉板代码。
答案 1 :(得分:2)
解决方案是不设置活动的工具栏。但如果您愿意,可以在Fragment.onStop()
。
如果您的工具栏看起来相同(按组件划分),请在活动中使用Toolbar
,并在每个片段的onAttach()
上传递工具栏标题,hasBack和...等参数您的活动,并让活动处理显示它。
这样你就不会有内存泄漏,并且每次附加一个片段时,工具栏都会相应地更新。
我建议您创建一个类似ToolbarInteractor
的界面,并使用两种方法setToolbar(title:String,hasBack:Boolean,...)
和resetToolbar()
让您的活动实现它。然后在您的片段中,调用((ToolbarInteractor) getActivity()).setToolbar(...)
。同样适用于reset()
。
答案 2 :(得分:0)
是的,如上面的答案,您可以拥有一个父活动,您可以在其中使用工具栏实现,并且碎片也在同一个实现。 现在要自定义工具栏标题,您可以实现方法界面并可以相应地使用。
简要说明&您可以使用其他选项LINK