onCreateOptionsMenu内片段(onCreateOptionsMenu inside

2019-07-28 02:45发布

我已经把setHasOptionsMenu(true)onCreateView ,但我还是不能叫onCreateOptionsMenu内部片段。

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
                         Bundle savedInstanceState) {   
   setHasOptionsMenu(true);             
   return inflater.inflate(R.layout.facesheet, container, false);
}

下面是我的onCreateOptionsMenu代码。

@Override
public boolean onCreateOptionsMenu(com.actionbarsherlock.view.Menu menu) {
    getSupportMenuInflater().inflate(R.menu.layout, menu);
    return (super.onCreateOptionsMenu(menu));
}

该错误消息我得到:

该方法onCreateOptionsMenu(Menu)类型片段的必须重写或实现的超类型方法。

Answer 1:

试试这个,

@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
    inflater.inflate(R.menu.menu_sample, menu);
    super.onCreateOptionsMenu(menu,inflater);
}

而在onCreate中加入这一行,使选项出现在你的Toolbar

setHasOptionsMenu(true);


Answer 2:

你已经拥有了自动生成的文件RES /菜单/ menu.xml文件定义action_settings。

在您的MainActivity.java有以下几种方法:

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    getMenuInflater().inflate(R.menu.menu, menu);
    return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    int id = item.getItemId();
    switch (id) {
        case R.id.action_settings:
            // do stuff, like showing settings fragment
            return true;
    }

    return super.onOptionsItemSelected(item); // important line
}

onCreateView()的调用片段的方法:

setHasOptionsMenu(true); 

还可以添加这2种方法:

@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
    inflater.inflate(R.menu.fragment_menu, menu);
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    int id = item.getItemId();
    switch (id) {
        case R.id.action_1:
            // do stuff
            return true;

        case R.id.action_2:
            // do more stuff
            return true;
    }

    return false;
}

最后,添加新的文件RES /菜单/ fragment_menu.xml定义ACTION_1ACTION_2。

当您的应用程序显示片段这样一来,它的菜单将会包含3项:

  • RES /菜单/ fragment_menu.xml ACTION_1
  • RES /菜单/ fragment_menu.xml ACTION_2
  • RES /菜单/ menu.xml文件 action_settings


Answer 3:

我试过@Alexander法伯和@Sino拉吉答案。 这两个答案都不错,但我不能用我的onCreateOptionsMenu里面的片段,直到我发现少了什么:

在我的活动添加setSupportActionBar(工具栏),就像这样:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.id.activity_main);

    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
    setSupportActionBar(toolbar);
}

我希望这个答案可能是有人用同样的问题很有帮助。



Answer 4:

呼叫

setSupportActionBar(toolbar)

onViewCreated(...) 

片段的

@Override
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
    super.onViewCreated(view, savedInstanceState);
    Toolbar toolbar = (Toolbar) view.findViewById(R.id.toolbar);
    ((MainActivity)getActivity()).setSupportActionBar(toolbar);
    setHasOptionsMenu(true);
}


Answer 5:

 @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.activity_add_customer, container, false);
        setHasOptionsMenu(true);
}

@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
    inflater.inflate(R.menu.menu_sample, menu);
    super.onCreateOptionsMenu(menu,inflater);
}


文章来源: onCreateOptionsMenu inside Fragments