Невозможно переопределить onCreateOptionsMenu в ListFragment - PullRequest
28 голосов
/ 21 октября 2011

Я создал приложение, которое поддерживает версию для телефона и планшета, поэтому я использую библиотеку android-support-v4.jar.

Моя деятельность расширяет ListFragment, и я попытался переопределить onCreateOptionsMenu (меню Menu, MenuInflater inflater), как показано в следующей ссылке: http://developer.android.com/resources/samples/Support4Demos/src/com/example/android/supportv4/app/FragmentMenuSupport.html

Ранее я вызывал setHasOptionsMenu.

К сожалению, похоже, что я не могу переопределить onCreateOptionsMenu ().

Это сообщение об ошибке:

Метод onCreateOptionsMenu (меню «Меню», вкладка «MenuInflater») Тип MyFragment должен переопределять или реализовывать метод супертипа.

И я сделал это с:

Public class MyFragment extends ListFragment

Ответы [ 10 ]

55 голосов
/ 21 октября 2011

Убедитесь, что импорт выполняется из библиотеки совместимости, а не из самого SDK.

47 голосов
/ 15 ноября 2011

ОК, у меня была такая же проблема, хотя она не была устранена тем, что здесь.Я использую библиотеку ActionBarSherlock, и получается, что onCreateOptionsMenu хочет, чтобы Menu был от android.support.v4.view.Menu, а MenuInflater был от android.view.MenuInflater, а не android.support.v4.view.MenuInflater.Не спрашивай меня почему.Я не знаю, удастся ли это всем исправить, поэтому я поделюсь с вами своим мнением:

Щелкните правой кнопкой мыши пустое пространство, где вы хотите, чтобы метод был в Elcipse> Source> Overide / Implementметоды ...

Тогда просто найдите его отсюда, и Eclipse автоматически импортирует правильные вещи.

26 голосов
/ 15 октября 2012

У меня была похожая проблема с использованием SherlockActionBar в моей деятельности.Вот моя установка, которая устранила проблему:

import com.actionbarsherlock.app.SherlockActivity;
import com.actionbarsherlock.view.Menu;

public class LoginActivity extends SherlockActivity {

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

...


}
16 голосов
/ 16 октября 2012

Была такая же проблема, но это потому, что я использовал неправильный метод onCreateOptionsMenu в своем фрагменте!

логическое onCreateOptionsMenu (меню меню) только для операций.

@Override //For Activities
public boolean onCreateOptionsMenu(Menu menu) { 
...

Пришлось переместить его в класс активности, содержащий Фрагмент.

Фрагменты имеют свои собственные: void onCreateOptionsMenu (меню меню, всплывающее окно MenuInflater)

@Override //For Fragments.
public void onCreateOptionsMenu (Menu menu, MenuInflater inflater){
...

Создание меню параметров: http://developer.android.com/guide/topics/ui/menus.html

7 голосов
/ 21 октября 2011

Ой !!!Это было хорошо!

Я импортировал android.view.Menu в MyFragment вместо android.support.v4.Menu!

Я потерял несколько часов на этом!Надеюсь, что этот пост может хотя бы помочь кому-то еще.

2 голосов
/ 27 ноября 2013

Попробуйте, на самом деле IDE запутался при импорте меню bw и импорте Шерлока ... поэтому, если мы укажем это ясно, то это будет решено

1 голос
/ 05 ноября 2013
@Override
public boolean onCreateOptionsMenu(com.actionbarsherlock.view.Menu menu) {
    // TODO Auto-generated method stub
    getSupportMenuInflater().inflate(R.menu.main, menu);
    return true;
}
0 голосов
/ 30 ноября 2015

У меня была такая же проблема, и это то, что я сделал, чтобы использовать onCreateOptionsMenu Fragment. Переопределите метод onCreate фрагмента и убедитесь, что вы используете метод setHasOptionsMenu со значением параметра «true», чтобы система знала, что фрагмент будет использовать OptionsMenu.

@Override
public void onCreate(Bundle savedInstanceState) {
     super.onCreate(savedInstanceState);
     setHasOptionsMenu(true);
}

Затем переопределите onCreateOptionsMenu, чтобы раздуть xml-файл вашего меню (здесь, в этом примере, я раздул фрагментmenu.xml

@Override
public void onCreateOptionsMenu (Menu menu, MenuInflater inflater) {
     inflater.inflate(R.menu.fragmentmenu, menu);
}
0 голосов
/ 09 ноября 2014

Только что возникла та же проблема в деятельности на Xamarin.он ожидал, что метод примет Xamarin.ActionbarSherlockBinding.Views.IMenu в качестве аргумента.

Как узнать: -Comment метод OnCreateOptionsMenu, который вы начали реализовывать.-В каком-то рабочем методе начните вводить OnCreateOptionsMenu так, как вы хотите его вызвать.-Выберите его из списка предложений.-Поместить курсор на вызов OnCreateOptionsMenu.Нажмите Ctrl + d, чтобы перейти в браузер сборки.Вы увидите интерфейс из реализации.-После того, как вы нажмете указатель мыши на требуемый тип параметра, вы попадете в интерфейс реализации этого типа.-И вы увидите пространство имен, в котором оно находится.

0 голосов
/ 03 августа 2012

Я использовал, я использовал com.actionbarsherlock.view.Menu - может быть, он изменился с тех пор?

...