Отключить ландшафтный режим в Android?

Вам также необходимо переопределить GetHashCode() (и предпочтительно также Equals()). В противном случае объект возвращает другой хэш-код, что означает, что ключ не найден при поиске.

Контракт GetHashCode() указывает, что возвращаемое значение из двух объектов ДОЛЖНО быть равным, если два объекты считаются равными. Это корень вашей проблемы; ваш класс не отвечает этому требованию. Контракт не указывает, что значение должно быть иным, если оно не равно, но это улучшит производительность. (Если все объекты возвращают один и тот же хэш-код, вы также можете использовать плоский список с точки зрения производительности.)

Простая реализация в вашем случае может быть:

public override int GetHashCode()
{
    return AValue.GetHashCode() ^ BValue.GetHashCode();
}

Обратите внимание, что было бы неплохо проверить, есть ли AValue или BValue null. (Это будет несколько сложно, поскольку вы не сдерживаете общие типы A и B, поэтому вы не можете просто сравнивать значения с null - например, типы могут быть типами значений.) 1

Также неплохо сделать классы, которые вы намереваетесь использовать, поскольку словарные ключи неизменяемы. Если вы измените значение объекта, который используется в качестве ключа, словарь проявит странное поведение, так как объект теперь находится в ведре, где он не принадлежит.


1 Обратите внимание, что вы можете использовать EqualityComparer.Default.GetHashCode(AValue) (и аналогичный для BValue) здесь, так как это устранит необходимость нулевой проверки.

881
задан wanttobeprofessional 12 September 2018 в 09:22
поделиться

1 ответ

Добавьте android:screenOrientation="portrait" к действию в AndroidManifest.xml. Например:

<activity android:name=".SomeActivity"
    android:label="@string/app_name"
    android:screenOrientation="portrait" />

РЕДАКТИРОВАНИЕ: Так как это стало суперпопулярным ответом, я чувствую себя очень виновным, поскольку принуждение портрета редко является правильным решением проблем, к этому часто относятся.
главные протесты с принудительным портретом:

  • Это не освобождает Вас необходимости думать о событиях жизненного цикла действия или правильно сохранении/восстановлении состояния. Существует много вещей помимо вращения приложения, которое может инициировать разрушение/воссоздание действия, включая неизбежные вещи как многозадачность. Нет никаких ярлыков; учитесь использовать пакеты и retainInstance фрагменты.
  • Имеют в виду, что в отличие от довольно универсального опыта iPhone, существуют некоторые устройства, где портрет не является явно популярной ориентацией. Когда пользователи находятся на устройствах с аппаратными клавиатурами или игровыми планшетами а-ля Щит Nvidia, на Chromebook , на foldables, или на , Samsung DeX , вызывая портрет может заставить Ваше приложение испытать или ограничение или гигантскую стычку удобства использования. Если бы Ваше приложение не имеет сильного аргумента UX, который привел бы к отрицательному опыту для поддержки других ориентаций, Вы не должны, вероятно, вызывать среду. Я говорю о вещах как "это, приложение кассового аппарата для одной определенной модели планшета, всегда используемого в фиксированном аппаратном прикреплении".

, Таким образом, большинство приложений должно просто позволить телефонным датчикам, программному обеспечению, и физическая конфигурация принимает их собственное решение относительно того, как пользователь хочет взаимодействовать с Вашим приложением. Несколько случаев, о которых можно все еще хотеть думать, тем не менее, если Вы не довольны поведением по умолчанию sensor ориентация в Вашем варианте использования:

  • , Если Ваше основное беспокойство является случайными изменениями ориентации середина действия, что Вы думаете, датчики и программное обеспечение устройства не справятся хорошо (например, в основанной на наклоне игре) рассматривают среду поддержки и портрет, но использование nosensor для ориентации. Это вызывает среду на большинстве планшетов и портрет по большинству телефонов, но я все еще не рекомендовал бы это для большинства "нормальных" приложений (некоторые пользователи точно так же, как для ввода в среде softkeyboard по их телефонам и многому чтению пользователей планшетов в портрете - и необходимо позволить им).
  • , Если Вы все еще потребность вызвать портрет по некоторым причинам, sensorPortrait может быть лучше, чем portrait для Android 2.3 +; это допускает перевернутый портрет, который довольно распространен в использовании планшета.
1565
ответ дан Yoni Samlan 26 August 2019 в 23:19
поделиться
  • 1
    Эти -X переключатель должен прибыть перед каждым именем файла. Таким образом для удаления нечто и панели используйте hg qrefresh -X foo -X bar. – nmichaels 21 March 2012 в 20:55
Другие вопросы по тегам:

Похожие вопросы: