2010-09-15 9 views
0

J'ai suivi les instructions et les exemples sur le site Web d'Android pour créer un menu contextuel mais le mien apparaît complètement noir et je ne peux pas changer les options dedans; n'importe qui a eu la même expérience et peut m'aider à résoudre ce problème.Le menu contextuel apparaît complètement noir

FWIW, voici ma .java de classe et les fichiers .xml de menu

<?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/red" 
       android:title="@string/red" 
       android:checked="true" /> 
     <item android:id="@+id/blue" 
       android:title="@string/blue" /> 
     <item android:id="@+id/green" 
       android:title="@string/green" /> 
     <item android:id="@+id/yellow" 
       android:title="@string/yellow" /> 
     <item android:id="@+id/black" 
       android:title="@string/black" /> 
     <item android:id="@+id/white" 
       android:title="@string/white" /> 
     <item android:id="@+id/orange" 
       android:title="@string/orange" /> 
    </group> 
</menu> 

 

package com.MyProject; 

import android.view.MenuInflater; 
import android.view.MenuItem; 
import android.app.Activity; 
import android.view.ContextMenu; 
import android.view.View; 
import android.view.ContextMenu.ContextMenuInfo; 

public class ColorsActivity extends Activity { 

    @Override 
    public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) { 
      super.onCreateContextMenu(menu, v, menuInfo); 
      MenuInflater inflater = getMenuInflater(); 
      inflater.inflate(R.menu.context_menu, menu); 
      registerForContextMenu(v); 

    } 
    public boolean onContextItemSelected(MenuItem item) { 
     switch (item.getItemId()) { 
      case R.id.red: 
       if (item.isChecked()) item.setChecked(false); 
       else item.setChecked(true); 
       return true; 
      case R.id.blue: 
       if (item.isChecked()) item.setChecked(false); 
       else item.setChecked(true); 
       return true; 
      case R.id.green: 
       if (item.isChecked()) item.setChecked(false); 
       else item.setChecked(true); 
       return true; 
      case R.id.yellow: 
       if (item.isChecked()) item.setChecked(false); 
       else item.setChecked(true); 
       return true; 
      case R.id.black: 
       if (item.isChecked()) item.setChecked(false); 
       else item.setChecked(true); 
       return true; 
      case R.id.white: 
       if (item.isChecked()) item.setChecked(false); 
       else item.setChecked(true); 
       return true; 
      case R.id.orange: 
       if (item.isChecked()) item.setChecked(false); 
       else item.setChecked(true); 
       return true; 
      default: 
       return super.onContextItemSelected(item); 
     } 
    } 
} 

Répondre

2

Activity.registerForContextMenu (View) enregistre le menu contextuel avec le système d'exploitation de sorte que lorsque le bouton de menu est pressé et la vue donnée est au premier plan, le rappel à onCreateContextMenu est fait. Ce que vous avez fait est d'enregistrer la vue dans le rappel, la rendant fondamentalement inaccessible dans votre code car la vue devrait déjà être enregistrée pour atteindre l'enregistrement que vous avez ici. registerForContextMenu doit être appelé dans l'une de vos méthodes de démarrage, probablement onResume.

+0

J'ai fait une erreur dans ma réponse, mais je l'ai maintenant édité alors j'espère que vous n'êtes pas trop confus. –