2011-06-22 3 views
4

Ici, j'ai écrit du code, mais ne pas obtenir de sortie .. S'il vous plaît dites-moi pourquoi ne pas afficher ce menu contextuel, où je fais erreur ...? S'il vous plaît me guide, Merci à l'avance ....Android, Comment créer un menu contextuel ...

more_tab_menu.xml

<?xml version="1.0" encoding="utf-8"?> 
<menu 
xmlns:android="http://schemas.android.com/apk/res/android"> 
<item 
    android:id="@+id/feeds" 
    android:title="Feeds"/> 
<item 
    android:id="@+id/friends" 
    android:title="Friends"/> 
<item 
    android:id="@+id/about" 
    android:title="About"/> 
</menu> 

MenuTest.java

public class MenuTest extends Activity { 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 
} 

@Override 
public void onCreateContextMenu(ContextMenu menu, View v, 
     ContextMenuInfo menuInfo) { 
    super.onCreateContextMenu(menu, v, menuInfo); 
    MenuInflater inflater =getMenuInflater(); 
    inflater.inflate(R.menu.more_tab_menu, menu); 
} 
@Override 
public boolean onContextItemSelected(MenuItem item) { 
    AdapterContextMenuInfo contextMenuInfo=(AdapterContextMenuInfo)item.getMenuInfo(); 
    switch(item.getItemId()) 
    { 
    case R.id.feeds: 
     break; 
    case R.id.friends: 
     break; 
    case R.id.about: 
     break; 
    } 

    return super.onContextItemSelected(item); 
} 
} 

S'il vous plaît me dire où que je fais erreur ...?

Répondre

5

En ce moment vous avez ceci:

super.onCreateContextMenu(menu, v, menuInfo); 
MenuInflater inflater =getMenuInflater(); 
inflater.inflate(R.menu.more_tab_menu, menu); 

Modifier à ceci:

MenuInflater inflater =getMenuInflater(); 
inflater.inflate(R.menu.more_tab_menu, menu); 
return true; 

également dans onOptionsItemSelected:

return true; 

utilisent également onCreateOptionsMenu et onOptionsItemSelected.

+0

ici j'ai fait des changements selon vous mais je n'ai pas eu de menu contextuel dans l'écran ... –

+0

d'autres changements ..? –

+0

désolé, j'ai posté quelque chose de mal dans le post .. je l'ai changé. essayez maintenant –

3

Vous devez enregistrer votre menu avec registerForContextMenu.

De this page

Pour un View pour donner un menu contextuel , vous devez "enregistrer" la vue pour un menu contextuel. Appelez le registerForContextMenu() et transmettez-le le menu Afficher que vous voulez donner au contexte . Lorsque cette vue reçoit une pression longue , elle affiche un menu contextuel .

Votre code ci-dessus fonctionne très bien. Vous avez juste besoin d'enregistrer le menu de contenu à une vue.

Si vous voulez lancer le menu contextuel de n'importe où dans l'écran:

Disons que votre mise en page main.xml est comme ce qui suit:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/mainLayout" 
    android:orientation="vertical" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent"> 

</LinearLayout> 

Vous enregistrer le menu contextuel que vous avez créé avec le suivant (en onCreate):

LinearLayout layout = (LinearLayout)findViewById(R.id.mainLayout); 
registerForContextMenu(layout); 

donc, si vous exécutez ce dans l'émulateur, et faites un clic prolongé sur le bureau Android, y notre menu apparaîtra.

0

Remplacer ceci:

@Override 
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) { 
    super.onCreateContextMenu(menu, v, menuInfo); 

    MenuInflater inflater = getMenuInflater(); 
    inflater.inflate(R.menu.more_tab_menu, menu); 
}  

Avec ceci:

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    super.onCreateOptionsMenu(menu); 

    MenuInflater inflater = getMenuInflater(); 
    inflater.inflate(R.menu.more_tab_menu, menu); 

    return true; 
} 

Cela se traduira par les éléments du menu étant affiché lorsque le bouton Menu du téléphone est pressé.

+0

Méthode non disponible dans 'android.support.v4.app.Fragment' –

Questions connexes