web-dev-qa-db-ja.com

ListFragmentのonCreateOptionsMenuをオーバーライドできません

携帯電話とタブレットの両方のバージョンをサポートするアプリを作成したので、Android-support-v4.jarライブラリを使用します。

私のアクティビティはListFragmentを拡張し、次のリンクのように、onCreateOptionsMenu(Menu menu、MenuInflater inflater)をオーバーライドしようとしました: http://developer.Android.com/resources/samples/Support4Demos/src/com/例/Android/supportv4/app/FragmentMenuSupport.html

以前にsetHasOptionsMenuを呼び出しました。

残念ながら、onCreateOptionsMenu()をオーバーライドできないようです。

これはエラーメッセージです。

MyFragmentタイプのメソッドonCreateOptionsMenu(Menu menu、MenuInflater inflater)は、スーパータイプメソッドをオーバーライドまたは実装する必要があります。

そして私はそれをしました:

Public class MyFragment extends ListFragment
28
Waza_Be

インポートがSDK自体からではなく、互換性ライブラリからであることを確認してください。

55
Maria Neumayer

わかりました。これと同じ問題が発生しましたが、ここにあるもので修正されませんでした。私はActionBarSherlockライブラリを使用していますが、onCreateOptionsMenuMenuAndroid.support.v4.view.MenuMenuInflaterAndroid.view.MenuInflaterではなくAndroid.support.v4.view.MenuInflater。理由を聞かないでください。これで問題が解決するかどうかはわかりません。

Elcipse> Source> Override/Implement methods ...でメソッドを配置する空白スペースを右クリックします。

次に、ここからそれを見つけるだけで、Eclipseは自動的に正しいものをインポートします。

47
Weston

私の活動で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;
    }

...


}
26
Chris Smith

同じ問題がありましたが、フラグメントで間違ったonCreateOptionsMenuメソッドを使用したためです。

boolean onCreateOptionsMenu(Menu menu) はアクティビティ専用です。

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

フラグメントを含むアクティビティクラスに移動する必要がありました。

フラグメントには独自のものがあります:void onCreateOptionsMenu(Menu menu、MenuInflater inflater)

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

オプションメニューの作成: http://developer.Android.com/guide/topics/ui/menus.html

16
TouchBoarder

痛い!よかった!

Android.support.v4.Menuではなく、MyFragmentにAndroid.view.Menuをインポートしました!

これで数時間失った!この投稿が少なくとも誰かを助けることを願っています。

7
Waza_Be

これを試してください、実際にはIDE混乱したbwネイティブメニューインポートとSherlockインポート..soを明確に指定すると解決されます。

@Override
    public void onCreateOptionsMenu(com.actionbarsherlock.view.Menu menu,
            com.actionbarsherlock.view.MenuInflater inflater) {

}

@Override
    public boolean onOptionsItemSelected(
            com.actionbarsherlock.view.MenuItem item) {
        // TODO Auto-generated method stub

}
2
Bala Vishnu
@Override
public boolean onCreateOptionsMenu(com.actionbarsherlock.view.Menu menu) {
    // TODO Auto-generated method stub
    getSupportMenuInflater().inflate(R.menu.main, menu);
    return true;
}
1
RZMars

Xamarinのアクティビティで同じ問題が発生しました。メソッドがXamarin.ActionbarSherlockBinding.Views.IMenuを引数として受け取ることを期待していました。

見つける方法:-OnCreateOptionsMenuメソッドにコメントします。実装を開始しました。 -いくつかの作業メソッドで、OnCreateOptionsMenuと入力し始めます。 -提案リストから選択してください。 -OnCreateOptionsMenu呼び出しにカーソルを置きます。 -コマンド+ dを押して、アセンブリブラウザに移動します。実装からのインターフェースが表示されます。 -次に、必要なパラメータタイプ上でマウスポインタを押すと、このタイプの実装のインターフェイスが表示されます。 -そして、名前空間が表示されます。

0
EdgarK

同じ問題があり、FragmentのonCreateOptionsMenuを使用するためにこれを実行しました。 FragmentのonCreateメソッドをオーバーライドし、パラメーター値が「true」のsetHasOptionsMenuメソッドを使用して、FragmentがOptionsMenuを使用することをシステムに通知します。

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

次に、onCreateOptionsMenuをオーバーライドして、メニューxmlファイルを膨らませます(この例では、ここでは、fragmentmenu.xmlを膨らませています)

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