6

Ho una classe Activity con uno DrawerLayout. Questo layout mostra un elenco in Drawer e consente all'utente di passare da fragments. In questi Fragments, ci sono alcuni URL e quando l'utente fa clic su quello, verrà mostrato un WebviewFragment. Tuttavia, non voglio mostrare lo DrawerLayout nello WebViewFragment. Preferirei che l'utente venisse reindirizzato al precedente Fragment.Mostra/nascondi DrawerLayout dipende dal frammento corrente

Esiste un modo per mostrare/nascondere DrawerLayout dipende da cosa è l'attuale Fragment? Provo a chiamare mDrawerLayout.setVisibility(View.GONE), ma sembra che non sia completo. Almeno l'icona ActionBar è ancora l'icona del cassetto.

risposta

18

È possibile utilizzare questo metodo per bloccare o sbloccare il cassetto: DrawerLayout.setDrawerLockMode(...). (Esistono anche altre due versioni di questo metodo per specificare una modalità di blocco per cassetti specifici.) Per bloccare, utilizzare DrawerLayout.LOCK_MODE_LOCKED_CLOSED; per sbloccare, utilizzare DrawerLayout.LOCK_MODE_UNLOCKED.

Se si utilizza ActionBarDrawerToggle, è necessario aggiungere del codice aggiuntivo per impedire l'apertura del cassetto quando fanno clic su ActionBarDrawerToggle se si è bloccato il cassetto.

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    // check lock mode before passing to ActionBarDrawerToggle 
    // I assume your drawer is on the left; if not, use Gravity.RIGHT 
    int lockMode = mDrawer.getDrawerLockMode(Gravity.LEFT); 
    if (lockMode == DrawerLayout.LOCK_MODE_UNLOCKED && 
      mDrawerToggle.onOptionsItemSelected(item)) { 
     return true; 
    } 
    // Handle your other action bar items... 

    return super.onOptionsItemSelected(item); 
} 
+0

ma l'icona di navigazione nella barra delle azioni è ancora qui ... – Bear

+3

Prova il metodo ActionBarDrawerToggle.setDrawerIndicatorEnabled() ' – Karakuri

1

Perché non aprire una nuova attività che ha solo una visualizzazione Web come contenuto? Quindi l'utente dovrà premere il pulsante Indietro per tornare all'Attività con DrawerLayout, e quindi non ci saranno problemi.

In alternativa, non è necessario disporre di una tale attività da soli, si può lasciare Android Trova un browser per loro di aprire invece utilizzando questo codice:

Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse("HTTP_URL_GOES_HERE")); 
startActivity(intent); 
+0

1. In realtà, non sono sicuro quando iniziare una nuova attività e quando aggiungere un frammento allo stack backstack. Ma penso che mostrare un frammento abbia meno overhead (meno tempo di caricamento coomettato per avviare una nuova attività) A mio avviso, molte app hanno solo una MainActivity e molti molti frammenti. 2. Molte app hanno il proprio WebViewFragment/WebViewActivity per mostrare un semplice web. Perché semplicemente non vuoi che l'utente lasci l'app. – Bear

+0

Mostrare una nuova attività non dovrebbe richiedere sensibilmente più tempo di un nuovo frammento. Penso che in realtà il tempo di caricamento dipenderà molto più da quanto tempo ci vuole per caricare la pagina web. Se vuoi mantenere il suer nella tua app, sposta il codice dal frammento di WebView a un'attività e usalo. Oppure vedi la mia altra risposta per seguire il tuo approccio attuale. – Karakuri

Problemi correlati