2011-01-27 4 views
0

У меня есть функция предпочтения, которая получает его макет из следующего XML. Это приводит к появлению кнопки внизу настроек.Custom PreferenceActivity Layout теряется для вложенных PreferenceScreens

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:myapp="http://schemas.android.com/apk/res/com.stealthcopter.nexus.nexusgl" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:orientation="vertical"> 
<ListView android:id="@android:id/list" 
    android:layout_weight="1" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" /> 
<Button android:text="This is a button on top of all preferences." 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    />   
</LinearLayout> 

Однако при открытии вложенного PreferenceScreen внутри он возвращается в показ только ListView, есть простой способ сохранить макет такой же, между привилегированными экранами?

Я попробовал PreferenceScreen.setLayoutResource (R.id.layout.main); но это только изменяет вид отображения до его открытия

Update

Я неподвижную (Kludged), изменив вложенные PreferenceScreens в нормальные предпочтения и перекрывая их OnClick методы, чтобы очистить свои предпочтения от ListView и перезагрузки предпочтения из соответствующего файла XML.

ответ

1

Я считаю, что это еще один симптом ошибки описал here работа вокруг, чтобы сбросить расположение каждого время открывается экран предпочтений.

+0

И есть ли общий способ поймать это событие, например, переопределить метод onSmth? Или мне нужно установить прослушиватель для каждого элемента PreferenceScreen (и будет ли он работать, потому что прослушиватель может быть вызван до того, как экран действительно будет открыт)? – lapis

+1

Я изучил источники: мы должны установить прослушиватель для каждого элемента PreferenceScreen, и мы должны вручную обрабатывать переключение между экранами, чтобы изменить их внешний вид, потому что каждый вложенный PreferenceScreen открывает новый диалог, поэтому наша деятельность ничего не знает об этом и не может его изменить. – lapis

0

Что вы пытаетесь достичь с помощью экрана пользовательских настроек? Здесь нет предпочтения принимать здесь во внимание? Я также я уверен, что раскладка предпочтения должны быть в папке «XML» не «макет»

+0

Экран предпочтения заполняет представление списка с предпочтениями, обычно не предоставляется, поэтому он просто создает список для вас. Если вы определяете макет для экрана предпочтений, он будет использовать это вместо этого (вы должны включить listview с идентификатором @android: id/list, который он может заполнить) – stealthcopter

+0

А я вижу, хорошо знать. – AedonEtLIRA