Версия 23.1.0 переключает NavigationView
на использование RecyclerView
(вместо предыдущего ListView
), и заголовок добавляется как один из этих элементов. Это означает, что не всегда доступно для вызова findViewById()
- требуется передать макет перед его присоединением к NavigationView
.
Для версии 23.1.1 поддержки Library, теперь вы можете получить ссылку на представление заголовка с помощью getHeaderView()
:
View headerLayout = navigationView.getHeaderView(0); // 0-index header
. Это имеет преимущество в работе над заголовками, добавленными через XML и через код.
Если вы по-прежнему используете 23.1.0, в соответствии с связанной ошибкой , вы можете раздуть заголовок в коде и использовать findViewById()
на этом:
View headerLayout =
navigationView.inflateHeaderView(R.layout.navigation_header);
panel = headerLayout.findViewById(R.id.viewId);
// panel won't be null
Пока вы не перейдете на 23.1.1.
В соответствии с Windows для Вас возможно делать изменения в переменные среды персистентными с помощью реестра с этот рецепт , хотя это походит на излишество.
Для повторения вопроса Brian, что Вы пытаетесь выполнить? Существует, вероятно, более легкий путь.
заставляют их остаться верным передаче их к системе?
я думаю, что Вы немного смущены здесь. Нет никакой 'системной' среды. Каждый процесс имеет их собственную среду, как разделяют ее память. Процесс может только изменить свою собственную среду. Процесс может установить начальную среду для процессов, которые это создает.
, Если Вы действительно думаете, что необходимо установить переменные среды для системы, необходимо будет посмотреть на изменение их в месте, они первоначально загружаются из подобного реестр на окнах или конфигурационный файл оболочки на Linux.
Я не полагаю, что можно сделать это; существует два обходных решения, о которых я могу думать.
os.putenv
функция устанавливает среду для процессов, которые Вы запускаете с, т.е. os.system, popen, и т.д. В зависимости от того, что Вы пытаетесь сделать, возможно, у Вас мог быть один экземпляр ведущего устройства Python, который устанавливает переменную и затем порождает новые экземпляры.
Вы могли выполнить сценарий оболочки или пакетный файл для установки его для Вас, но это становится намного менее портативным. См. эту статью:
Согласно это обсуждение , Вы не можете сделать этого. Что Вы пытаетесь выполнить?
Думайте об этом этот путь.
Вы не устанавливаете переменные среды оболочки.
Вы порождаете подоболочку с некоторыми данными настройками переменной среды; эта подоболочка запускает Ваше приложение с измененной средой.
Вы разветвляете новый процесс и не можете изменить среду родительского процесса, поскольку Вы не можете сделать при запуске нового процесса оболочки с оболочки
Вы могли бы хотеть попробовать Расширения Python Win32 , разработанный Mark Hammond, который включен в ActivePython (или может быть установлен отдельно). Можно изучить, как выполнить много связанных с Windows задач в книга .
Hammond и Robinson Используя PyWin32 для доступа к окнам COM-объекты , программа Python может использовать Свойство Среды (набор переменных среды) эти WScript.Shell
объект.
Из Python? Нет, это не может быть сделано!
, Если Вы не связываетесь с Python, необходимо рассмотреть использование сценариев оболочки (sh, удар, и т.д.). "Исходная" команда позволяет Вам запускать скрипт, который изменяет среду и будет "придерживаться" как Вы, хотят к оболочке, в которой Вы "получили" сценарий. Что продолжается, вот то, что оболочка выполняет сценарий, непосредственно довольно создающий подпроцесс для выполнения сценария.
Это будет довольно портативно - можно использовать cygwin на окнах, чтобы сделать это.