首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >是否从activity创建新的menuInflater或getMenuInflater()?

是否从activity创建新的menuInflater或getMenuInflater()?
EN

Stack Overflow用户
提问于 2011-10-15 14:37:47
回答 3查看 29.9K关注 0票数 9

我在fragment中创建了新的选项菜单,但在阅读了http://developer.android.com/resources/articles/avoiding-memory-leaks.html之后,它告诉我使用上下文应用程序比使用上下文活动更好,我害怕使用getActivity().getMenuInflater()

所以,实际上哪一个更好

代码语言:javascript
复制
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
    MenuInflater mInflater = new MenuInflater(getActivity().getApplicationContext());
    mInflater.inflate(R.menu.simple_menu, menu);
}

或者one call活动

代码语言:javascript
复制
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
    MenuInflater mInflater = getActivity().getMenuInflater();
    mInflater.inflate(R.menu.simple_menu, menu);

}

他们两个有什么不同? or..both是一样的吗?

谢谢。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-10-15 16:28:39

它们非常相似。查看MenuInflator的源代码,它使用上下文的唯一目的是访问资源文件。因此,特定的上下文对MenuInflator来说并不重要。

至于内存泄漏,您参考的文章中说

避免内存泄漏的最明显的方法是避免在它自己的作用域之外转义上下文

除非您将MenuInflator (或菜单)传递给另一个类,否则它将包含在活动中,不会泄漏。

编辑

此外,对于new MenuInflator()来说,Activity.getMenuInflator()只是一种方便的方法。实际上,这是Activity类中的方法:

代码语言:javascript
复制
public MenuInflater getMenuInflater() {
    return new MenuInflater(this);
}

使用方便的方法通常更好,因为它们允许在未来的版本中更改底层实现,而不必更改代码。例如,如果将上述方法修改为返回一个缓存实例,而不是每次都创建一个新实例。

票数 14
EN

Stack Overflow用户

发布于 2014-02-28 16:19:06

您应该使用传递给public void onCreateOptionsMenu(Menu menu, MenuInflater inflater)方法的MenuInflater实例(请注意第二个参数)

这没有真正的区别,因为通常你一使用完它就会“忘记”它,但是如果你已经从参数中创建了一个,为什么还要创建一个呢?

票数 1
EN

Stack Overflow用户

发布于 2017-03-25 19:15:38

从以下内容更改:

代码语言:javascript
复制
MenuInflater inflater = getMenuInflater();

要这样做:

代码语言:javascript
复制
MenuInflater inflater = getActivity().getMenuInflater();
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7776258

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档