我有一个MainActivity
和一个片段。我有一个刷新菜单选项,用于刷新数据(使用AsyncTask
)。对片段中的刷新菜单选项进行膨胀是否与MainActivity中相比有什么不同?
注意:这与Udacity开发Android应用程序,第2课有关。
答案 0 :(得分:1)
是的,如果我理解正确,您想要从片段中膨胀您的活动工具栏菜单。如果是这种情况,你可以这样做
Yout Fragment class
@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);
}
如果要在某些子片段中隐藏/显示菜单,也可以使用 setMenuVisibility(boolean)
如果您在活动中夸大菜单,它将显示在您在活动中加载的所有片段中,但该操作仅适用于活动(如果您这样做很好想要做一些菜单操作的常规内容,比如开始新活动,显示信息弹出窗口等)。如果从片段中膨胀菜单,您将能够处理包含片段的菜单项,这将允许您根据当前活动的片段创建更具体的菜单操作。例如,如果你有一个包含3个不同片段的viewpager,那就说:
假设您希望仅允许用户上传图片,并且您希望该上传按钮位于菜单中。
如果您在活动中对菜单进行充气,您的上传按钮将在所有片段中显示,并且您必须创建用于显示隐藏菜单项的自定义/逻辑。如果您从片段中创建菜单,您将能够处理并显示所需片段的菜单
长话短说我认为这取决于活动/片段的用例以及你想用它实现的目标