2016-11-08 2 views
0

私はフラグメントと単一のButtonを持っています。私の目標は、ユーザーがそのボタンをクリックするたびにmenu_language.xmlと表示することです。私はオンラインで答えを見つけようとしましたが、それは私が得ることができる最も近いです...しかし、それは働いていません:私がボタンを押すと何も起こらない。このコードの何が間違っていますか?ここでボタンをクリックしてメニューを表示する:なぜ私のコードは機能しませんか?

@Nullable 
    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
     View fgm = inflater.inflate(R.layout.fragment_settings, container, false); 
     Button changeLanguageBtn = (Button) fgm.findViewById(R.id.change_language_button); 
     changeLanguageBtn.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       getActivity().openOptionsMenu(); 
      } 
     }); 
     return fgm; 
    } 

    @Override 
    public void onCreateContextMenu(ContextMenu menu, View view, ContextMenu.ContextMenuInfo menuInfo) { 
     super.onCreateContextMenu(menu, view, menuInfo); 
     if (view.getId() == R.id.change_language_button) { // is this even necessary? 
      MenuInflater inflater = getActivity().getMenuInflater(); 
      inflater.inflate(R.menu.menu_language, menu); 
     } 
    } 

    @Override 
    public boolean onContextItemSelected(MenuItem item) { 
     switch (item.getItemId()) { 
      case R.id.action_english: 
       // switch to English 
       return true; 
      case R.id.action_italian: 
       // switch to Italian 
       return true; 
      case R.id.action_french: 
       // switch to French 
       return true; 
      default: 
       return super.onContextItemSelected(item); 
     } 
    } 

は、メニューのXMLです:

<?xml version="1.0" encoding="utf-8"?> 
<menu xmlns:android="http://schemas.android.com/apk/res/android"> 

    <group android:checkableBehavior="single"> 
     <item 
      android:id="@+id/action_italian" 
      android:title="@string/italian" /> 
     <item 
      android:id="@+id/action_english" 
      android:title="@string/english" /> 
     <item 
      android:id="@+id/action_french" 
      android:title="@string/french" /> 
    </group> 
</menu> 
+0

ツールバーを使用していますか? –

+0

ツールバーがありますが、 'change_language_button'は**ありません**:画面中央にあります。 – Robb1

+0

私はあなたが間違ったメソッドを実装したと思います。onCreateOptionsMenuとonCreateContextMenuを比較してください。 –

答えて

0

あなたは、コンテキストメニューを実装し、オプションメニューを実装する必要があります。

public void onCreateContextMenu(ContextMenu menu, View view, ContextMenu.ContextMenuInfo menuInfo) 

あなたがそのメソッドのJavadocを読んでいる場合:

​​

のに対し、私はあなたがActionBarにメニューを追加したい場合は、(間違った方法があると思う

see instructions here

0

public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {

は言う:あなたが活動にメニューを追加したい場合は

/** 
    * Initialize the contents of the Activity's standard options menu. You 
    * should place your menu items in to <var>menu</var>. For this method 
    * to be called, you must have first called {@link #setHasOptionsMenu}. See 
    * {@link Activity#onCreateOptionsMenu(Menu) Activity.onCreateOptionsMenu} 
    * for more information. 
    * 
    * @param menu The options menu in which you place your items. 
    * 
    * @see #setHasOptionsMenu 
    * @see #onPrepareOptionsMenu 
    * @see #onOptionsItemSelected 
    */ 

だから、あなたは以降を使用する必要があります。ここで、文脈のメニューを押したボタンに固定して表示する場合は、PopupMenuクラスを見てください。

is this needed?のコメントについては、回答はで、おそらくあなたのケースではではありません。

+0

あなたの答えをありがとう。私は**オプションメニュー**を使用しようとしています**あなたが示唆したように私はそれを動作させることはできません。この場合に使用するコードを直接修正してもよろしいですか? – Robb1

+0

私は少し忙しかったですが、私はしばらくメニューを使用していませんでしたが、私が思い出したところでは、 'public boolean onPrepareOptionsMenu(final Menu menu){'を実装したいでしょう。 flag/booleanは、メニューを表示するかどうかを示します。 onPrepareOptionsMenuは、そのメニューに項目を追加/削除する(メニューを受け取っているので)必要な場合はXMLから膨らませることができます。試してみて、それがどうなったか教えてください。検索:「ランタイムアンドロイドでプログラムでプログラムを変更する」などとすると、多くのサンプルが見つかる可能性があります。がんばろう! –

+0

また、コールバックが呼び出されるように 'invalidateOptionsMenu();'を呼び出す必要があります(ただしatmは思い出せません) –

関連する問題