Android:从片段更改ActionBar菜单项

任何人都可以给出一个快速的例子,如何改变一个活动行动栏的内容基于发生在一个片段的东西? 我的意图是:

普通菜单项 – >片段中的东西被移动 – >菜单项改变为保存/放弃button。

我的第一个冲动是在活动和片段中设置广播接收器来串扰,但我不确定这是否正确。

Solutions Collecting From Web of "Android:从片段更改ActionBar菜单项"

片段可以改变操作栏中的菜单。 为此,你必须使用方法setHasOptionsMenu(true);在fragment的oncreate()添加必要的标志setHasOptionsMenu(true);

当你的片段被加载,你会得到onCreateOptionsMenu(Menu menu, MenuInflater inflater) ,就像在一个活动。 然后对您的菜单进行必要的更改。

将菜单保存为片段中的全局菜单,并且只要您想进行更改,就可以应用该菜单。

以下为我工作。 我有一个自定义的类,实现ListView.MultiChoiceModeListener里面的片段:

 public void onItemCheckedStateChanged(ActionMode mode, int position, long id, boolean checked) { // Choose the correct Action Bar menu to display int menu = myCondition == true ? R.menu.my_default_menu : R.menu.my_menu_2; // Configure to use the desired menu mode.getMenu().clear(); MenuInflater inflater = getActivity().getMenuInflater(); inflater.inflate(menu); } 

鉴于如何检测“在片段中的东西已经移动”,扩展ListView.MultiChoiceModeListener可能不适合你,但希望这说明了如何更改菜单。 关键是要访问一个ActionMode实例。

我想你想使用一个上下文的行动模式 。 在拖动事件中,您将启动一个新的ActionMode,它可以用特定于您希望允许用户执行的操作栏的内容replace操作栏的内容。 一旦用户select了一个动作,就完成动作模式,动作条返回到之前的状态。

不知道如果一个ActionBar实例可以帮助您的菜单,但肯定会有用的..这是一个方法来解决它

尝试使用Fragment中的onAttach(Activity activity)方法从FragmentActivity获取ActionBar。

首先在这个片段中创build一个FragmentActivity的全局对象

 public class YourFragment extends Fragment { private YourFragmentActivity context; } 

在YourFragment类中覆盖这个

 @Override public void onAttach(Activity activity){ context = (YourFragmentActivity)activity; super.onAttach(activity); } 

然后在YourFragment的OnCreate方法中执行此操作

 @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState){ ... android.support.v7.ActionBar actionBar = context.getSupportActionBar(); ... }