2010-09-15 2 views
0

Я выполнил инструкции и примеры на веб-сайте Android, чтобы создать контекстное меню, но мое изображение полностью черное, и я не могу изменить какие-либо его варианты; кто-то там имел такой же опыт и может помочь мне решить эту проблему.Контекстное меню полностью черное

FWIW, вот мой класс .java и XML-файлы меню

<?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); 
     } 
    } 
} 

ответ

2

Activity.registerForContextMenu (View) регистрирует контекстное меню операционной системы, так что при нажатии кнопки меню и данное представление находится на переднем плане, выполняется обратный вызов onCreateContextMenu. То, что вы сделали, это зарегистрировать представление в обратном вызове, что делает его принципиально недостижимым в вашем коде, потому что представление должно быть уже зарегистрировано, чтобы получить регистрацию у вас здесь. registerForContextMenu следует вызывать в одном из ваших методов запуска жизненного цикла, возможно, onResume.

+0

Я ошибся в своем ответе, но теперь я его отредактировал, поэтому надеюсь, вы не слишком смущены. –

Смежные вопросы