
当我单击主页图标时,抽屉将打开,然后立即将我带回到上一个活动.我相信setdisplayHomeAsUpEnabled(true)会干扰 *** 作栏抽屉保持打开状态.
代码中是否有任何原因可能导致这种情况?
import androID.support.v4.app.ActionbarDrawerToggle;import androID.support.v4.app.Fragment;import androID.support.v4.app.FragmentActivity;import androID.support.v4.app.FragmentManager;import androID.support.v4.app.FragmentStatePagerAdapter;import androID.support.v4.vIEw.GravityCompat;import androID.support.v4.Widget.DrawerLayout;public class GenericActivity extends FragmentActivity implements SearchVIEw.OnqueryTextListener {/** SlIDe out drawer navigation **/private DrawerLayout mDrawerLayout;private ListVIEw mDrawerList;private ActionbarDrawerToggle mDrawerToggle;private CharSequence mDrawerTitle;private CharSequence mTitle;private String[] mTitles;@OverrIDeprotected voID onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentVIEw(R.layout.activity_in_draft); // Set up drawer navigation. mTitle = mDrawerTitle = getTitle(); mTitles = getResources().getStringArray(R.array.in_draft_menu_items); mDrawerLayout = (DrawerLayout) findVIEwByID(R.ID.drawer_layout); mDrawerList = (ListVIEw) findVIEwByID(R.ID.left_drawer); // Set a custom shadow that overlays the main content when the drawer opens mDrawerLayout.setDrawerShadow(R.drawable.drawer_shadow, GravityCompat.START); // Set up the drawer's List vIEw with items and click Listener mDrawerList.setAdapter(new ArrayAdapter<String>(this, R.layout.drawer_List_item, mTitles)); mDrawerList.setonItemClickListener(new DrawerItemClickListener()); // Enable Actionbar app icon to behave as action to toggle nav drawer getActionbar().setdisplayHomeAsUpEnabled(true); getActionbar().setHomebuttonEnabled(true); // ActionbarDrawerToggle tIEs together the the proper interactions // between the slIDing drawer and the action bar app icon mDrawerToggle = new ActionbarDrawerToggle(this, mDrawerLayout, R.drawable.ic_drawer, R.string.drawer_open, R.string.drawer_close) { public voID onDrawerClosed(VIEw vIEw) { getActionbar().setTitle(mTitle); invalIDateOptionsMenu(); // creates call to onPrepareOptionsMenu() } public voID onDrawerOpened(VIEw drawerVIEw) { getActionbar().setTitle(mDrawerTitle); invalIDateOptionsMenu(); // creates call to onPrepareOptionsMenu() } }; mDrawerLayout.setDrawerListener(mDrawerToggle); if (savedInstanceState == null) { selectItem(0); }}@OverrIDepublic boolean onCreateOptionsMenu(Menu menu) { MenuInflater inflater = getMenuInflater(); inflater.inflate(R.menu.in_draft, menu); // Inflate the menu; this adds items to the action bar if it is present. MenuItem statusItem = menu.findItem(R.ID.draftStatusMenuItem); mChatItem = menu.findItem(R.ID.chatMenuItem); MenuItem settingsItem = menu.findItem(R.ID.settingsMenuItem); final MenuItem refreshItem = menu.findItem(R.ID.refreshMenuItem); final MenuItem searchItem = menu.findItem(R.ID.action_search); if (mSearchFIEldToggleState == 1) { searchItem.setVisible(true); mSearchVIEw = (SearchVIEw) searchItem.getActionVIEw(); mSearchVIEw.setonqueryTextListener(this); // Close the search when mSearchVIEw is not focused. Also, show/hIDe the refresh menu button depending on the state. mSearchVIEw.setonqueryTextFocuschangelistener(new VIEw.OnFocuschangelistener() { @OverrIDe public voID onFocusChange(VIEw vIEw, boolean queryTextFocused) { if(!queryTextFocused) { searchItem.collapseActionVIEw(); mSearchVIEw.setquery("", true); refreshItem.setVisible(true); } else { refreshItem.setVisible(false); } } }); } else { searchItem.setVisible(false); } if (refreshItem == null) { return true; } // Set this menu item to refresh the league. refreshItem.setonMenuItemClickListener( new MenuItem.OnMenuItemClickListener() { public boolean onMenuItemClick(MenuItem item) { return draftRefreshMenuItem(item); } }); return super.onCreateOptionsMenu(menu);}/* Called whenever we call invalIDateOptionsMenu() */@OverrIDepublic boolean onPrepareOptionsMenu(Menu menu) { // If the nav drawer is open, hIDe action items related to the content vIEw boolean drawerOpen = mDrawerLayout.isDrawerOpen(mDrawerList); menu.findItem(R.ID.refreshMenuItem).setVisible(!drawerOpen); menu.findItem(R.ID.action_search).setVisible(!drawerOpen); return super.onPrepareOptionsMenu(menu);}@OverrIDepublic boolean onoptionsItemSelected(MenuItem item) { // The action bar home/up action should open or close the drawer. if(mDrawerToggle.onoptionsItemSelected(item)) { return true; } return super.onoptionsItemSelected(item);}/* The click Listener for ListVIEw in the navigation drawer */private class DrawerItemClickListener implements ListVIEw.OnItemClickListener { @OverrIDe public voID onItemClick(AdapterVIEw<?> parent, VIEw vIEw, int position, long ID) { selectItem(position); }}private voID selectItem(int position) { mSearchFIEldToggleState = 0; invalIDateOptionsMenu(); // When the given dropdown item is selected, show its contents in the // container vIEw. if (position == 0){ mSearchFIEldToggleState = 1; invalIDateOptionsMenu(); Fragment fragment = new DraftSectionFragment(); getSupportFragmentManager().beginTransaction().replace(R.ID.container, fragment).commit(); } else if (position == 1) { Fragment fragment = new MyTeamSectionFragment(); getSupportFragmentManager().beginTransaction().replace(R.ID.container, fragment).commit(); } else if (position == 2) { Fragment fragment = new RosteRSSectionFragment(); getSupportFragmentManager().beginTransaction().replace(R.ID.container, fragment).commit(); } else if (position == 3) { Fragment fragment = new ResultsSectionFragment(); getSupportFragmentManager().beginTransaction().replace(R.ID.container, fragment).commit(); } // update selected item and Title, then close the drawer mDrawerList.setItemChecked(position, true); setTitle(mTitles[position]); mDrawerLayout.closeDrawer(mDrawerList);}@OverrIDepublic voID setTitle(CharSequence Title) { mTitle = Title; getActionbar().setTitle(mTitle);}/** * When using the ActionbarDrawerToggle, you must call it during * onPostCreate() and onConfigurationChanged()... */@OverrIDeprotected voID onPostCreate(Bundle savedInstanceState) { super.onPostCreate(savedInstanceState); // Sync the toggle state after onRestoreInstanceState has occurred. mDrawerToggle.syncState();}@OverrIDepublic voID onConfigurationChanged(Configuration newConfig) { super.onConfigurationChanged(newConfig); // Pass any configuration change to the drawer toggles mDrawerToggle.onConfigurationChanged(newConfig);}/** * Handle the query text changing. submit the query to the filter. * @param query * @return */public boolean onqueryTextChange(String query) { if (mDraftPlayerAdapter != null && mDraftVIEwPager != null && mDraftPlayerAdapter.getFragmentReferenceMap() != null && mDraftPlayerAdapter.getFragmentReferenceMap().get(mDraftVIEwPager.getCurrentItem()) != null) { mDraftPlayerAdapter.getFragmentReferenceMap().get(mDraftVIEwPager.getCurrentItem()).getFilter().filter(query); } return false;}/** * Handle the query text being submitted - with a return key. Same process as onqueryTextChange. * @param query * @return */public boolean onqueryTextsubmit(String query) { onqueryTextChange(query); return false;}}解决方法:
在早期版本的支持库中,mDrawerToggle.onoptionsItemSelected(item)始终返回false-确保您使用的是最新版本的Support Library(或至少是18或更高版本).
这是支持库的r18中的最新代码:
public boolean onoptionsItemSelected(MenuItem item) { if (item != null && item.getItemID() == ID_HOME && mDrawerIndicatorEnabled) { if (mDrawerLayout.isDrawerVisible(GravityCompat.START)) { mDrawerLayout.closeDrawer(GravityCompat.START); } else { mDrawerLayout.openDrawer(GravityCompat.START); } return true; } return false;}如您所见,如果传入的项目是主页按钮(androID.R.ID.home与ID_HOME相同)并且mDrawerToggle.isDrawerIndicatorEnabled()为true(默认值),它将返回true.
总结以上是内存溢出为你收集整理的java-setDisplayHomeAsUpEnabled关闭ActionBarDrawerToggle全部内容,希望文章能够帮你解决java-setDisplayHomeAsUpEnabled关闭ActionBarDrawerToggle所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)