Когда это происходит? Это после нажатия кнопки или до? если это после того, как вы хотите установить все атрибуты диалогового окна, прежде чем его надувать. Поместите код:
getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
перед:
setContentView(R.layout.activity_dialog)
РЕДАКТИРОВАТЬ: у меня была та же проблема всякий раз, когда диалоговое окно было отменено, я обнаружил, что в моем случае контекст приложения был null каждый раз, когда это происходило.
Вы видели, касательно / скольких действительно не понимают разработчики?
Я использую их, где они действительно необходимы, но не иначе. Они обычно только полезны, если Вы хотите эффективно возвратить два или больше значения - в этом случае это стоит, по крайней мере, думать о том, существует ли способ заставить метод только сделать одну вещь вместо этого. Иногда использование касательно / является самым соответствующим подходом - различные методы TryParse и т.д.
По-моему, их считают запахом кода потому что в целом существует много более оптимального варианта: возврат объекта.
Если Вы замечаете, в библиотеке.NET они только используются в некоторых особых случаях, а именно, подобные tryparse сценарии где:
касательно / автоматически переменчивости средств и функционального программирования с неизменными значениями весь гнев в эти дни. Попытайтесь вставить вызов в Словарь. TryGetValue в запрос LINQ. API требует объявления переменных и разрушает любую 'беглость' в API.
Но это вовсе не значит это - "причина", но это - пример "причины".
(См. также
http://lorgonblog.spaces.live.com/blog/cns!701679AD17B6D310!181.entry
для комментария относительно того, как функциональные языки имеют дело с такими API.)
Причиной, которую мне сказали, являются 1,0 GC, имел проблемы, когда касательно / использовался. GC в 2,0 (и вероятно не 1.1 любой) не имеет тех проблем, таким образом, я обычно предполагал бы, что это - теперь неполезное наследие.
касательно / также не работают с делегатами "Func", таким образом, эти API стиля менее компонуемы/допускающие повторное использование с некоторыми другими API то использование делегаты.
@TraumaPony было бы хорошо, если Вы даете нам источник (URL или что-то) к этой платформе.NET инструкции.
Сбивающий с толку, вероятно, лучшая причина. Сбивающий с толку означает уменьшенную пригодность для обслуживания и увеличенную вероятность при представлении тонких ошибок. Я вижу их в подобном представлении к "goto" оператору управления. В то время как это не по сути плохо на своем собственном соглашении, это имеет вывод многим, многие невозможные читать / понимают программы за десятилетия.
Держитесь подальше от чего-либо, что может сделать Ваш код более сбивающим с толку затем, это должно быть.
Однако те ключевые слова существуют, вероятно, потому что разработчики инфраструктуры видели потребность в таких вещах. Используйте их, если нет никакого подходящего обходного решения, но избегайте их, когда Вы можете.
Просто мысль, я нахожу касательно / быть полезным, когда аргументы получают состояние выполнения в целевом методе вместо того, чтобы собрать возвращенные данные. Рассмотрите сценарий, когда Вы хотите получить сообщение об ошибке от сервиса, что Клиент возвратов возражает.
Customer GetCustomerById(int id, out string errorMessage);
Если бы этот метод перестал работать, Вы, вероятно, возвратились бы, пустой Клиент возражают или выдают исключение. Однако, если я хочу знать причину ошибки (проверка? база данных?), я использовал бы аргумент. аргумент errorMessage здесь не имеет никакого отношения к данным, просто используемым для получения что случилось с осуществлением метода.
Лично, если у меня есть метод, который, как ожидают, возвратит два или больше существенных данные/значения, я заново продумал бы дизайн своего кода.
Необходимо возвращаться, объекты, вероятно, наиболее вероятная причина, что они предлагают не использовать касательно или.
"касательно" действительно только должен использоваться при передаче скалярных величин, но я вижу, что люди часто используют его для объектов, которые передаются ссылкой так или иначе.
Разве сложность кода не, рассуждают достаточно? Сравните:
int myValue;
ReadFromSomewhere(ref myValue);
Кому:
int myValue = ReadFromSomewhere();