android - Why is my DrawerLayout still open on activity resume, in spite of closing it? -


i have drawerlayout contains listview of items link other activities. onitemclick event of listview switch-case each menu element, runs code

... case targetactivity:     listviewinstance.clearchoices();     drawerinstance.closedrawer(mainmenulayout);     drawerinstance.requestlayout();      startactivity(targetintent);     break; ... 

this works expected, if change device orientation , targetintent returns base activity cleartop flag, drawerlayout still open! in spite of explicit call closedrawer, , despite fact can see closing new activity starting. doing wrong? (i using xamarin.android, if relevant).

[edit 1: suspect closedrawer registers drawer closed when closing animation completed, , base activity paused before occurs. if call closedrawer in different thread , pause current thread moment before call startactivity, drawer works expected, although of course not suitable solution. have better idea how solve in clean fashion?].

[edit 2: 1 possible solution, linked here, create event listener drawer's ondrawerclosed event:

public class drawerlistener2 : drawerlayout.simpledrawerlistener     {         public override void ondrawerclosed(view view)         {             base.ondrawerclosed(view);              var listparent = (relativelayout)view;             var listviewinstance = listparent.findviewbyid<listview>(resource.id.mainmenu);              int selectedindex = menulistview.checkeditemposition;              switch (selectedindex)             {                 case 0:                     // start activity                     break;                 case 2: // element 1 menu spacer                     // start activity b                     break;                 case 3:                     // start activity c                     break;             }         }     }  ... // in base activity's onresume: drawerinstance.setdrawerlistener(new drawerlistener2()); ... 

this has 2 problems make no-go: have recreate menu item order in switch-case since can't reach object contains information in ondrawerclosed handler, , can't start required activities event handler since these require intent information base activity].

solved semi-ugly hack:

in base activity, create property stores value extra:

private bool forcedrawermenucloseonactivityresume     {         { return intent.getbooleanextra("forcedrawermenucloseonactivityresumekey", false); }         set { intent.putextra("forcedrawermenucloseonactivityresumekey", value); }      } 

in base activity's onresume(), re-close drawer if property set:

if (forcedrawermenucloseonactivityresume) {              drawerinstance.closedrawer(mainmenulayout);             forcedrawermenucloseonactivityresume = false;         } 

when closing drawer, before starting activity causes drawer remain open on activity resume:

case targetactivity:     drawerinstance.closedrawer(mainmenulayout);     listviewinstance.clearchoices();     forcedrawermenucloseonactivityresume = true;      startactivity(targetintent); 

Comments

Popular posts from this blog

javascript - Google App Script ContentService downloadAsFile not working -

javascript - Function overwritting -

php - Find a regex to take part of Email -