2017-08-18 14 views
-3

メニュー項目をクリックするとポップアップメニューを表示しようとしています。しかし、私は "MenuPopupHelperアンカーなしで使用することはできません"というエラーが表示されます。私は何ができますか。私は何かが欠けていることを知っています。私はこのエラーを解決するためにインターネットで検索したが何も助けた。アンドロイドのメニュー項目をクリックしたときにポップアップメニューを表示するには

私menu_main.xmlファイル

<?xml version="1.0" encoding="utf-8"?> 
<menu xmlns:android="http://schemas.android.com/apk/res/android"> 
<item android:title="screen1" 
    android:id="@+id/scr1"/> 
<item android:title="screen2" 
    android:id="@+id/scr2"/> 
<item android:title="screen3" 
    android:id="@+id/scr3" 
    /> 
<item android:title="change sound" 
    android:id="@+id/changesound" 
    /> 


</menu> 

popup_menu.xml

<?xml version="1.0" encoding="utf-8"?> 
<menu xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:app="http://schemas.android.com/apk/res-auto"> 
<item android:title="female" 
    android:id="@+id/voice_female" 
    /> 
<item android:title="male" 
    android:id="@+id/voice_male" 
    /> 

</menu> 

そして、あなたはサポートポップアップメニューを使用している場合、これが私の活動のコード

public class Main3Activity extends AppCompatActivity { 


Button btn_default; 

String username; 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    btn_default=(Button)findViewById(R.id.setdefault); 
    //set button click 
    btn_default.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      ; 
     } 
    }); 




} 

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

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 



    switch (item.getItemId()){ 
     case R.id.scr1: 

      break; 
     case R.id.scr2: 

      break; 
     case R.id.scr3: 

      break; 
     case R.id.changesound: 
      showpopup(); 

      break; 


    } 
    return super.onOptionsItemSelected(item); 

} 
public void showpopup() 
{ 
    View v=findViewById(R.id.changesound); 
    //Creating the instance of PopupMenu 
    PopupMenu popup = new PopupMenu(Main3Activity.this, v); 

    //Inflating the Popup using xml file 
    popup.getMenuInflater().inflate(R.menu.popup_menu, 
    popup.getMenu()); 

    //registering popup with OnMenuItemClickListener 
    popup.setOnMenuItemClickListener(new 
    PopupMenu.OnMenuItemClickListener() { 

     public boolean onMenuItemClick(MenuItem item) { 

      Toast.makeText(Main3Activity.this, "clicked", 
Toast.LENGTH_SHORT).show(); 
      return true; 
     } 
    }); 

    popup.show();//showing popup menu 

} 
} 
+0

このリンクはあなたがhttps://stackoverflow.com/questions/14729592/show-popup-menu-on-actionbar-item-click –

+0

多分 "findViewById(R.id.changesound)は" ヌル –

+0

Iを返す役立つことあなたのクラスで呼び出された 'setContentView'メソッドが見つかりませんでした。 –

答えて

0

チェックです。

import android.support.v7.widget.PopupMenu; 

私は同じ問題ではなく、活動の活性およびサポートを使用していた持っていたと

import android.widget.PopupMenu; 

が、これはあなたを助けること願っています。

+0

私はこの解決方法を試しましたが、同じエラーが発生しました – user555

0

メニューボタンの右側をクリックします。

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

     case R.id.action_dropdown2: 
      ... 
      return true; 
     ... 

     default: 
      return super.onOptionsItemSelected(item); 
    } 
} 
0

showpopup();return true;を追加しようとすると、(メニューのインフレータではなく、ポップアップを膨らませる)の順でメソッドを呼び出すようにしてください:あなたがsetContentView()を持っていない場合は、

... 
popup.setOnMenuItemClickListener(...); 
popup.inflate(...); 
popup.show(); 

そして、もちろん、 onCreate()に追加する必要があります。

+0

私はそれを試しましたが、同じエラーが発生しました。私のアプリ "findViewById(R.id.changesound)"をデバッグしたときにnullを返します。 – user555

+0

これを試してください:パラメータvをshowpopup()に追加し、onOptionsItemSelectedでこれを呼び出すと、findViewById(R.id.changesound)をこのメソッドに渡します。 – Hetfieldan24

関連する問題