java-setDisplayHomeAsUpEnabled关闭ActionBarDrawerToggle

java-setDisplayHomeAsUpEnabled关闭ActionBarDrawerToggle,第1张

概述当我单击主页图标时,抽屉将打开,然后立即将我带回到上一个活动.我相信setDisplayHomeAsUpEnabled(true)会干扰 *** 作栏抽屉保持打开状态.代码中是否有任何原因可能导致这种情况?importandroid.support.v4.app.ActionBarDrawerToggle;importandroid.support.v4.app.Fragment;imp

当我单击主页图标时,抽屉将打开,然后立即将我带回到上一个活动.我相信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所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/1087600.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-27
下一篇2022-05-27

发表评论

登录后才能评论

评论列表(0条)

    保存