携帯電話とタブレットの両方のバージョンをサポートするアプリを作成したので、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
インポートがSDK自体からではなく、互換性ライブラリからであることを確認してください。
わかりました。これと同じ問題が発生しましたが、ここにあるもので修正されませんでした。私はActionBarSherlockライブラリを使用していますが、onCreateOptionsMenu
がMenu
をAndroid.support.v4.view.Menu
とMenuInflater
はAndroid.view.MenuInflater
ではなくAndroid.support.v4.view.MenuInflater
。理由を聞かないでください。これで問題が解決するかどうかはわかりません。
Elcipse> Source> Override/Implement methods ...でメソッドを配置する空白スペースを右クリックします。
次に、ここからそれを見つけるだけで、Eclipseは自動的に正しいものをインポートします。
私の活動で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;
}
...
}
同じ問題がありましたが、フラグメントで間違った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
痛い!よかった!
Android.support.v4.Menuではなく、MyFragmentにAndroid.view.Menuをインポートしました!
これで数時間失った!この投稿が少なくとも誰かを助けることを願っています。
これを試してください、実際には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
}
@Override
public boolean onCreateOptionsMenu(com.actionbarsherlock.view.Menu menu) {
// TODO Auto-generated method stub
getSupportMenuInflater().inflate(R.menu.main, menu);
return true;
}
Xamarinのアクティビティで同じ問題が発生しました。メソッドがXamarin.ActionbarSherlockBinding.Views.IMenuを引数として受け取ることを期待していました。
見つける方法:-OnCreateOptionsMenuメソッドにコメントします。実装を開始しました。 -いくつかの作業メソッドで、OnCreateOptionsMenuと入力し始めます。 -提案リストから選択してください。 -OnCreateOptionsMenu呼び出しにカーソルを置きます。 -コマンド+ dを押して、アセンブリブラウザに移動します。実装からのインターフェースが表示されます。 -次に、必要なパラメータタイプ上でマウスポインタを押すと、このタイプの実装のインターフェイスが表示されます。 -そして、名前空間が表示されます。
同じ問題があり、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);
}