Контекстное меню отображается полностью черным - PullRequest
0 голосов
/ 16 сентября 2010

Я следовал инструкциям и примерам на веб-сайте 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);
        }
    }
}

1 Ответ

2 голосов
/ 16 сентября 2010

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

...