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
}
}
ce lien peut vous aider à https://stackoverflow.com/questions/14729592/show-popup-menu-on-actionbar-item-click –
peut-être "findViewById (R.id.changesound)" retourner un null –
I Impossible de trouver la méthode 'setContentView' appelée dans votre classe. –