[TIMOB-26274] Android: Drawer hamburger menu disappears on click
| GitHub Issue | n/a |
|---|---|
| Type | Bug |
| Priority | Medium |
| Status | Closed |
| Resolution | Fixed |
| Resolution Date | 2018-08-24T01:19:06.000+0000 |
| Affected Version/s | Release 7.4.0, Release 7.3.0, Release 7.2.0 |
| Fix Version/s | Release 7.5.0 |
| Components | Android |
| Labels | n/a |
| Reporter | Hans Knöchel |
| Assignee | Gary Mathews |
| Created | 2018-08-07T20:02:46.000+0000 |
| Updated | 2018-08-24T01:19:10.000+0000 |
Description
While trying to get a reproducible case for memory-issues, I found another issue where when clicking the hamburger menu of a drawer layout will hide it and does not make it come back.
Test-Case:
var window = Ti.UI.createWindow({ backgroundColor: 'white', theme: 'Theme.AppCompat.NoTitleBar', exitOnClose: false });
var btn = Ti.UI.createButton({
title: 'Trigger'
});
btn.addEventListener('click', function() {
var window2 = Ti.UI.createWindow({ title: 'Test' });
var left = Ti.UI.createView({ backgroundColor: 'red' });
var center = Ti.UI.createView({ backgroundColor: 'blue' });
var button2 = Ti.UI.createButton({ title: 'Close'});
left.add(button2);
button2.addEventListener('click', function () {
drawer.closeLeft();
window.open();
window2.close();
})
var drawer = Ti.UI.Android.createDrawerLayout({
centerView: center,
leftView: left
});
window2.add(drawer);
window2.open();
window.close();
});
window.add(btn);
window.open();
*Work-Around:*
The solution is to set up the hamburger button on the ActionBar yourself like this...
window.addEventListener("open", function(e) {
var actionBar = window.activity.actionBar;
if (actionBar) {
actionBar.displayHomeAsUp = true;
actionBar.homeButtonEnabled = true;
actionBar.onHomeIconItemSelected = function(e) {
// Handle the hamburger button click here...
};
}
});
We document this here...
https://docs.appcelerator.com/platform/latest/#!/api/Titanium.Android.ActionBar
I think the real issue here is that adding the native
DrawerLayoutto the window automatically adds the hamburger button to theActionBarand it's mishandled from there. Perhaps theDrawerLayoutshould not automatically add the button since we don't know which drawer (left, center, or right) to slide-out out.master: https://github.com/appcelerator/titanium_mobile/pull/10243
*Closing ticket.* No longer disappears when clicked and is only shown when specified
actionBar.displayHomeAsUp = true;The fix is present in SDK: {noformat} 7.4.0.v20180813131247 {noformat} *ENV* {noformat} Appc NPM: 4.2.13 Appc CLI: 7.0.4 Ti CLI: 5.1.1 Node: 8.9.4 NPM: 6.3.0 {noformat} *Test case* {noformat} var window = Ti.UI.createWindow({ backgroundColor: 'white', theme: 'Theme.AppCompat.NoTitleBar', exitOnClose: false }); var btn = Ti.UI.createButton({ title: 'Trigger' }); btn.addEventListener('click', function() { var window2 = Ti.UI.createWindow({ title: 'Test' }); var left = Ti.UI.createView({ backgroundColor: 'red' }); var center = Ti.UI.createView({ backgroundColor: 'blue' }); var button2 = Ti.UI.createButton({ title: 'Close'}); left.add(button2); button2.addEventListener('click', function () { drawer.closeLeft(); window.open(); window2.close(); }) var drawer = Ti.UI.Android.createDrawerLayout({ centerView: center, leftView: left }); // hamburger menu should only show when this is uncommented /*window2.addEventListener('open', function(){ var activity = window2.getActivity(), actionBar = activity.getActionBar(); if (actionBar) { actionBar.displayHomeAsUp = false; actionBar.onHomeIconItemSelected = function() { drawer.toggleLeft(); }; } });*/ window2.add(drawer); window2.open(); window.close(); }); window.add(Ti.UI.createTableView({ data: [{ title: 'Test' }], footerView: btn })); window.open(); {noformat}