Когда класс ListActivity для Android вызывает setContentView ()? - PullRequest
1 голос
/ 01 августа 2011

Я пытаюсь использовать функцию requestWindowFeature() для установки пользовательского представления заголовка в списке действий. Метод отлично работает с представлением, которое только подклассы Activity, но всякий раз, когда я пытаюсь использовать тот же метод с подклассом ListActivity, он выдает ошибку, давая мне исключение NullPointerException, когда я пытаюсь программно изменить представление заголовка.

Я полагаю, что проблема связана с тем, что requestWindowFeature() необходимо вызвать до setContentView(). Поскольку ListActivity заботится о настройке представления контента для вас, я не знаю, когда это вызывается. У кого-нибудь есть предложения? Спасибо за помощь.

Ответы [ 4 ]

1 голос
/ 01 августа 2011

setContentView вызывается всякий раз, когда вы взаимодействуете со списком, например, вызывая getList () или setAdapter () для списка доступности. См. источник списка

0 голосов
/ 08 ноября 2012

Иногда requestWindowFeature() дает исключение NullPointerException, если оно вызывается после вызова super.onCreate(bundle);. Другая причина в том, что если вы сначала позвонили setContentView.

super.onCreate(bundle); и setContentView должны вызываться после всех requestWindowFeature() вызовов.

0 голосов
/ 02 августа 2011

Решением моей проблемы для любого googlers было скопировать исходный код класса ListActivity, а также файл layout_content.xml в пакет моего собственного приложения и создать его подкласс вместо класса Android ListActivity.Затем я добавил метод onCreate() в этот класс, где я установил запрос оконной функции, и затем вызвал метод setContentView().Hack?Наверное.Работает?Да :) 1007 *

0 голосов
/ 01 августа 2011

ListActivity не позаботится о том, чтобы позвонить вам setContentView: вам все равно нужно сделать это самостоятельно.Ваше представление контента должно иметь соответствующее имя ListView, но вам все равно нужно позвонить setContentView самостоятельно.Просто позвоните requestWindowFeature сразу после super.onCreate звоните onCreate, а затем позвоните setContentView после этого, и вы должны быть золотыми.

РЕДАКТИРОВАТЬ: моя ошибка, вы совершенно правы (яне знал этого: я всегда просто звонил setContentView с пользовательским макетом).

Из здесь следует, что нет способа пропустить вызов requestWindowFeature до вызова setContentView в ListActivity: он ВСЕГДА вызывает setContentView сразу после super.onCreate вызов.Вы можете попробовать позвонить requestWindowFeature, прежде чем позвонить super.onCreate, но я подозреваю, что это не будет работать лучше.

Я не думаю, что вы сможете использовать значение по умолчанию ListActivity для этого: выВозможно, вам потребуется использовать обычное действие и вручную делать привязки ListView.

...