我有一个 MainActivity
和一个 fragment 。我有一个刷新菜单选项,可以刷新数据(使用AsyncTask
)。在 fragment 中膨胀刷新菜单选项与在 MainActivity 中膨胀有什么区别吗?
注意:这是 Udacity 的开发 Android 应用程序第 2 课的上下文。
最佳答案
是的,如果我理解正确的话,您想从 fragment 中扩展您的 Activity 工具栏菜单。如果是这种情况,你可以这样做
Yout Fragment类
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//setHasOptionsMenu is important
//it's telling the parent activity that he wants to participate in inflation of the menu
setHasOptionsMenu(true);
}
//Rest of your methods (onCreateView, onPause, onResume etc...)
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
//inflate the menu file
inflater.inflate(R.menu.your_menu_xml, menu);
super.onCreateOptionsMenu(menu, inflater);
}
@Override
public boolean onOptionsItemSelected(android.view.MenuItem item) {
switch (item.getItemId()) {
case R.id.refresh:
//handle click
return true;
}
return super.onOptionsItemSelected(item);
}
如果您想在某些子 fragment 中隐藏/显示菜单,也可以使用 setMenuVisibility(boolean)
如果您从 Activity 内扩充菜单,它将显示在您在 Activity 内加载的所有 fragment 中,但该操作仅对 activity 可用(如果您想要用菜单操作执行一些常规操作,例如启动新 Activity 、显示信息弹出窗口等)。如果您从 fragment 内扩充菜单,您将能够在 fragment 内处理菜单项,这将允许您根据当前 Activity 的 fragment 创建更具体的菜单操作。例如,如果您的 viewpager 具有 3 个不同的 fragment ,可以这样说:
- 用于图像浏览的 FragmentOne
- 用于视频浏览的 FragmentTwo
- 用于文本浏览的 FragmentThre
假设您只想允许用户上传图像,并且您希望上传按钮位于菜单中。
如果您从 Activity 中膨胀菜单,您的上传按钮将在所有 fragment 中可见,并且您必须创建一个自定义/逻辑来显示隐藏菜单项。如果您从 fragment 中创建菜单,您将能够处理并显示所需 fragment 的菜单
长话短说,我认为这取决于 Activity/fragment 的用例以及您想用它实现的目标
关于java - 将菜单添加到 Activity 而不是 fragment ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37814363/