2017-08-18 2 views
-3

J'essaie d'afficher un menu contextuel lorsque je clique sur un élément de menu. Mais je reçois l'erreur "MenuPopupHelper ne peut pas être utilisé sans une ancre". Que puis-je faire. Je sais que je manque quelque chose.J'ai cherché sur Internet pour résoudre cette erreur, mais rien n'a aidé.Comment afficher un menu contextuel lorsque vous cliquez sur un élément de menu dans android

mon fichier 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> 

Et voici mon code d'activité

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

ce lien peut vous aider à https://stackoverflow.com/questions/14729592/show-popup-menu-on-actionbar-item-click –

+0

peut-être "findViewById (R.id.changesound)" retourner un null –

+0

I Impossible de trouver la méthode 'setContentView' appelée dans votre classe. –

Répondre

0

Vérifiez si vous utilisez le support PopUpMenu.

import android.support.v7.widget.PopupMenu; 

J'ai eu le même problème utilisait l'activité et de soutien au lieu de l'activité et

import android.widget.PopupMenu; 

souhaite que cela vous aide.

+0

j'ai essayé cette solution mais obtenant toujours la même erreur – user555

0

Cliquez sur le côté droit du bouton de menu.

@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

Essayez d'ajouter return true; après showpopup(); Essayez d'appeler des méthodes dans cet ordre (et gonfler pop-up, pas le menu gonfleur),:

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

Et, bien sûr, si vous avez pas setContentView() dans votre onCreate(), vous devez ajouter cela.

+0

je l'ai essayé mais obtenant toujours la même erreur. quand j'ai débogué mon application "findViewById (R.id.changesound)" retourne une valeur nulle. – user555

+0

Essayez ceci: ajoutez le paramètre View v à votre showpopup(), et lorsque vous appelez cela dans onOptionsItemSelected, passez findViewById (R.id.changesound) à cette méthode. – Hetfieldan24