La désactivation de la navigation tiroir à partir de fragment
J'ai une application avec une navigation tiroir et 4 éléments de navigation (Fragments). Dans l'un des Fragments, j'ai un onglet mise en page avec pager (3 Fragments).
De l'un de ces intérieur des fragments, je veux désactiver/activer la navigation tiroir de manière dynamique. En gros, sur pression d'un bouton, je veux restreindre l'accès à la navigation drawer (tiroir et de le ré-activer en appuyant sur nouveau).
Comment aurais-je le faire?
J'ai essayé d'accéder à la DrawerLayout
de l'activité parent de ce fragment. Mais je ne vois pas de méthodes pour activer/désactiver la navigation tiroir.
La façon dont je l'ai ajouté le tiroir de mon Activité principale:
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
toggle = new ActionBarDrawerToggle(this, drawer, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close);
drawer.setDrawerListener(toggle);
NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view);
navigationView.setNavigationItemSelectedListener(this);
(et bien sûr j'ai ajouté toggle.syncState()
de l'intérieur de la onPostCreate
méthode.
setDrawerLockMode()
pour la DrawerLayout
, et setDrawerIndicatorEnabled()
pour la ActionBarDrawerToggle
.Réglage
setDrawerLockMode()
arrêté le glisser-geste. Mais pour définir setDrawerIndicatorEnabled()
, comment puis-je accéder à ActionBarDrawerToggle
de l'intérieur de mon Fragment?Idéalement, vous devriez faire cela par le biais d'un
interface
que l'Activité met en œuvre, où l' interface
'méthode dans l'Activité des appels à ces méthodes mentionnées ci-dessus.Yep, j'ai essayé de le faire. Mais les choses se sont très compliqué, parce que je suis en train de le faire dans l'un des Fragments de la ViewPager d'un Onglet mise en page, qui à son tour est contenue dans un Fragment détenue par le principal de l'activité :-/ Si vous pouvez fournir des indices sur la façon de procéder (comme le pseudo-code? ou un code de base de la structure?), il serait vraiment génial
"Mais les choses se sont très compliqué, parce que je suis en train de le faire dans l'un des Fragments de la ViewPager d'un Onglet mise en page, qui à son tour est contenue dans un Fragment détenue par le principal de l'activité" - Qui n'est pas vraiment pertinent, comme le Fragment est encore attaché directement à l'Activité. Cast
getActivity()
à votre interface
.OriginalL'auteur Roshnal | 2016-03-27
Vous devez vous connecter pour publier un commentaire.
Propre façon de faire cela est de créer un
interface
que leActivity
met en œuvre, à travers lequel leFragment
pouvez appeler une méthode locale de laActivity
qui gère le tiroir de verrouillage et le bouton à bascule unis. Par exemple:Dans le
Activity
'sinterface
méthode, il nous suffit de comprendre le mode de verrouillage de la constante pour leDrawerLayout#setDrawerLockMode()
appel, et l'appelsetDrawerIndicatorEnabled()
sur leActionBarDrawerToggle
.Dans le
Fragment
, nous avons simplement besoin de jeter l'hébergementActivity
à lainterface
, et d'appeler lasetDrawerEnabled()
méthode en conséquence. Par exemple, pour verrouiller le tiroir fermé:NB: Depuis la version 23.2.0 de la v7 appcompat bibliothèque de prise en charge,
ActionBarDrawerToggle
respecte laDrawerLayout
's le mode de verrouillage, et ne sera pas basculer le tiroir de l'état, si elle est verrouillée. Cela signifie qu'il n'est pas strictement nécessaire à l'utilisation desetDrawerIndicatorEnabled()
, mais il pourrait être souhaitable de toujours le faire afin de fournir à l'utilisateur une indication visuelle que l'interrupteur est désactivé.OriginalL'auteur Mike M.