Ресурс не содержит определения для Menu

#c# #xamarin.android

#c# #xamarin.android

Вопрос:

я учусь создавать приложение с использованием xamarin, и я получил ошибку при создании меню параметров. Код и метаданные вставлены ниже.

 public override bool OnCreateOptionsMenu(IMenu menu)
{
    MenuInflater inflater = MenuInflater;
    inflater.Inflate(Resource.Menu.Options, menu);
    return true;
    //return base.OnCreateOptionsMenu(menu);
}
public override bool OnOptionsItemSelected(IMenuItem item)
{
    if (item.ItemId == Resource.Id.action_refresh)
    {
        return true;
    }
    return base.OnOptionsItemSelected(item);
}
  

И метаданные вставлены ниже:

 public partial class Menu
{

    // aapt resource value: 0x7F0C0000
    public const int Options = 2131492864;

    static Menu()
    {
        global::Android.Runtime.ResourceIdManager.UpdateIdValues();
    }
  

Это вторая ошибка при использовании Resource.Id.action_refresh, метаданные конструктора вставлены ниже:

 public const int action_refresh = 2131230744;
        
  

Это вывод:

1>—— Начата сборка: Проект: и приложение, Конфигурация: Отладка любого процессора —— 1 >C:UserssimonsourcereposAndAppAndAppMainActivity.cs (31,39,31,43): ошибка CS0117: «Ресурс» не содержит определения для «Меню» 1>C:UserssimonsourcereposAndAppAndAppMainActivity.cs (37,44,37,58): ошибка CS0117: ‘Ресурс.Идентификатор’ не содержит определения для ‘action_refresh’ ========== Сборка: 0 выполнена успешно, 1 сбой, 0 обновлено, 0 пропущено ========== ========== Развертывание: 0 выполнено успешно, 0 не выполнено, 0 пропущено ==========

Ответ №1:

Если необходимо использовать ресурс.Меню, вам нужно создать папку menu под папкой Ресурсов.

введите описание изображения здесь

Затем создайте .xml файл внутри него. Например:

 <menu xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools">
    <item
        android:id="@ id/action_settings"
        android:orderInCategory="100"
        android:title="@string/action_settings"
        app:showAsAction="never" />
</menu>
  

Затем может использоваться в xxxActivity.cs:

 public override bool OnCreateOptionsMenu(IMenu menu)
{
    MenuInflater.Inflate(Resource.Menu.menu_main, menu);
    return true;
}
  

Примечание: При добавлении нового элемента в Ресурсы вам лучше очистить проект и перестроить его.Затем можно использовать новый элемент в коде. Если также отображается красное подчеркивание элемента resource, вы можете проигнорировать его, чтобы продолжить сборку и запустить проект. В целом он будет выполнен успешно. Потому что иногда Visual Studio не может немедленно обновить новый элемент в code.

Комментарии:

1. Я сделал так, что имя моего XML-файла — Options, а имя папки — menu, как вы и сказали

2. Я также очистил решение

3. @AmazingPets Окей, закройте VS и перезапустите его, чтобы проверить, работает ли он.

4. @AmazingPets И является ли первое слово в menu названии папки строчным?

5. нет, все то же самое, и the options.xml находится в Resource.designer.cs и вызывается оттуда, а не из расположения папки.