Как обернуть DrawerLayout вокруг PreferenceActivity в приложении для Android?

Я пишу приложение для Android, чтобы воспользоваться функциональностью Layer Layout. Я хочу иметь возможность использовать Layer Layout в качестве навигационного инструмента, доступного во всем приложении. Чтобы использовать Layer Layout, я использую следующие в XML-файлах my layout layout:

<android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/drawer_layout" android:layout_width="match_parent" android:layout_height="match_parent"> <!-- The main content view --> <LinearLayout android:id="@+id/main_content_layout" android:layout_width="match_parent" android:layout_height="match_parent" /> <!-- The navigation drawer --> <ListView android:id="@+id/navigational_drawer" android:layout_width="220dp" android:layout_height="match_parent" android:layout_gravity="start" android:choiceMode="singleChoice" android:divider="@android:color/transparent" android:dividerHeight="0dp" android:background="#FFFFFF"/> </android.support.v4.widget.DrawerLayout> 

Тем не менее, у меня много трудностей, связанных с DrawerLayout вокруг PreferenceActivity. PreferenceActivity – это особый вид активности, который я хотел бы сохранить, потому что он помогает мне поддерживать внешний вид Android-настроек в моем приложении; При этом он использует вызовы addPreferencesFromResource () для предпочтений загрузки и не использует вызовы addContentView () для загрузки файлов XML; Ресурсы предпочтений обычно содержат теги PreferenceScreen, которые не любят быть обернутыми в DrawerLayouts.

Кто-нибудь должен был решить эту проблему и как вы ее разрешили? Если у вас есть приложение PreferenceActivity в вашем приложении для Android, и у вас есть DrawerLayout, доступный в одном и том же действии, сообщите, как вы это сделали. Любая помощь приветствуется.

EDITED: Если я изменю

 <!-- The main content view --> <LinearLayout android:id="@+id/main_content_layout" android:layout_width="match_parent" android:layout_height="match_parent" /> 

в

 <ListView android:id="@android:id/list" android:layout_width="fill_parent" android:layout_height="fill_parent" /> 

То приложение не сбой при загрузке PreferenceActivity (поскольку список «id» соответствует тому, что ожидает функция предпочтения); Однако ящик не отображается. Это почти похоже на то, что все, что ниже списка ListView, игнорируется.

Solutions Collecting From Web of "Как обернуть DrawerLayout вокруг PreferenceActivity в приложении для Android?"

Это заняло у меня некоторое время, но я смог сделать эту работу для своего приложения. Я не знаю, имеет ли это значение, но я использую HoloEverywhere , поэтому я предполагаю, что это будет работать и над стандартной HoloEverywhere PreferenceActivity .

В моей PreferenceActivity когда я перегрузил все версии setContentView() чтобы загрузить мой пользовательский DrawerLayout который похож на ваш, и имеет ListView со стандартным идентификатором Android. В последнем методе я убедился, что вы вызываете onContentChanged() после того, как я вызвал super.setContentView() :

 @Override public void setContentView(int layoutResID) { setContentView( getLayoutInflater().inflate( layoutResID ) ); } @Override public void setContentView(View view) { setContentView( view, new LayoutParams( LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT ) ); } @Override public void setContentView(View view, LayoutParams params) { // inflate the drawer layout super.setContentView( R.layout.navigation_drawer_base_layout ); DrawerLayout dl = findViewById(R.id.drawer_layout); // do stuff here initialize the DrawerLayout like add a DrawerToggle, etc ...STUFF // Call onContentsChanged() to let the Activity know it needs to refresh itself. onContentChanged(); } 

В onBuildHeaders() я все еще вызываю loadHeadersFromResource() чтобы создать все Header для моих разных PreferenceScreen s.