7

Sto scrivendo un'app Android per sfruttare la funzionalità Layout cassetto. Voglio avere la possibilità di utilizzare Disposizione dei cassetti come strumento di navigazione disponibile in tutta l'app. Per utilizzare il layout cassetto, io sto usando il seguente nei miei file di layout XML di attività:Come avvolgere DrawerLayout attorno a PreferenceActivity in un'app Android?

<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> 

Tuttavia, sto avendo molte difficoltà che avvolgono intorno alla DrawerLayout PreferenceActivity. PreferenceActivity è un tipo speciale di attività che vorrei preservare perché mi aiuta a mantenere l'aspetto e le preferenze delle preferenze Android nella mia app; detto questo, usa le chiamate addPreferencesFromResource() per caricare le preferenze e non usa le chiamate addContentView() per caricare file XML; le risorse di preferenza contengono in genere i tag di PreferenceScreen che non desiderano essere inclusi in DrawerLayouts.

Qualcuno ha dovuto occuparsi di questo problema e come lo ha risolto? Se hai PreferenceActivity nella tua app per Android e hai DrawerLayout disponibile sulla stessa attività, per favore condividi come hai fatto. Qualsiasi aiuto sarebbe molto apprezzato.

Modificato: Se cambio

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

a

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

quindi l'applicazione non va in crash quando PreferenceActivity viene caricato (perché l'ID "lista" corrisponde a ciò che la preferenza attività prevede di trova); tuttavia, il cassetto non viene visualizzato. È quasi come se tutto quello che si trova sotto l'elenco di ListView venga ignorato.

+0

Voglio anche conservare le mie attività esistenti e aggiungere il cassetto dinamicamente. Non a causa di PreferenceActivity, ma poiché ci sono quasi 100 attività e la loro modifica in frammenti richiederebbe un po 'di tempo. Sono stato in grado di farlo con HorizontalScrollView, ma sento che DrawerLayout sarebbe molto più pulito. –

risposta

2

Questo mi ha richiesto un po ', ma sono riuscito a farlo funzionare per la mia app. Non so se faccia la differenza, ma sto usando HoloEverywhere, quindi presumo solo che funzioni anche sullo standard PreferenceActivity.

Nel mio PreferenceActivity quando ho calpestato tutte le versioni di setContentView() per caricare mia abitudine DrawerLayout che è come la tua e ha una ListView con l'id Android standard list. Nell'ultimo metodo che ho fatto in modo di chiamare onContentChanged() dopo ho chiamato 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(); 

    } 

In onBuildHeaders() chiamo ancora loadHeadersFromResource() per creare tutte le Header s per i miei diversi PreferenceScreen s.

+0

Grazie, Jon. Da molto tempo mi sono trasferito e ho implementato la mia attività per imitare l'aspetto e l'aspetto di PreferenceActivity. Contrassegnerò la tua risposta come "risposta". – CocoaAficionado

+0

@jon implemento lo stesso codice che scrivi qui, ma non funziona, puoi aiutarmi, ecco la mia domanda: http://stackoverflow.com/questions/37629855/how-to-set-navigation-drawer -in-preferenceactivity –

Problemi correlati