Android:从Fragment更改ActionBar菜单项

时间:2012-03-09 01:08:53

标签: android android-fragments android-actionbar

有人能举例说明如何根据片段中发生的事情更改“活动”操作栏的内容吗?我的意图:

普通菜单项 - >片段中的某些内容被移动 - >菜单项更改为保存/放弃按钮。

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

3 个答案:

答案 0 :(得分:22)

片段可以更改操作栏中的菜单。为此,您必须使用方法oncreate()

在片段setHasOptionsMenu(true);中添加必要的标记

当您的片段加载后,您将在onCreateOptionsMenu(Menu menu, MenuInflater inflater)拨打电话,就像在活动中一样。然后对菜单进行必要的更改。

将菜单保存为片段中的全局菜单,无论何时想要进行更改,都可以应用它。

答案 1 :(得分:4)

我想你想使用contextual action mode。在拖动事件中,您将启动一个新的ActionMode,它可以使用特定于您希望用户执行的操作的菜单项替换操作栏的内容。用户选择操作后,您将完成操作模式,操作栏将返回其先前的状态。

答案 2 :(得分:1)

不确定ActionBar实例是否会对您的菜单有所帮助,但肯定会有用..这是一种解决问题的方法

尝试使用片段中的onAttach(活动活动)方法从FragmentActivity获取ActionBar。

首先在Fragment中创建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();

    ...
}