关闭导览在应用程序启动 [英] Close Navigation Drawer on application start

查看:107
本文介绍了关闭导览在应用程序启动的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我已经与抽屉式导航的应用程序。每当应用程序首次启动时,它具有导航抽屉打开。

有什么办法,我可以将其设置为关闭?下面是自动生成的code的理解。

 进口com.example.navigationdrawer.R;进口android.support.v7.app.ActionBarActivity;进口android.app.Activity;进口android.support.v7.app.ActionBar;进口android.support.v4.app.Fragment;进口android.support.v4.app.ActionBarDrawerToggle;进口android.support.v4.view.GravityCompat;进口android.support.v4.widget.DrawerLayout;进口android.content.Shared preferences;进口android.content.res.Configuration;进口android.os.Bundle; 。进口的Andr​​oid preference preferenceManager。进口android.view.LayoutInflater;进口android.view.Menu;进口android.view.MenuInflater;进口android.view.MenuItem;进口android.view.View;进口android.view.ViewGroup;进口android.widget.AdapterView;进口android.widget.ArrayAdapter;进口android.widget.ListView;进口android.widget.Toast;/ ** *用于管理并导航*抽屉presentation互动片段。见的< A HREF = *https://developer.android.com/design/patterns/navigation-drawer.html#Interaction
*>设计准则< / A>对于行为的完整说明*在这里实现。 * / public类NavigationDrawerFragment扩展片段{    / ** *记住所选项目的位置。 * /私有静态最后弦乐STATE_SELECTED_POSITION =selected_navigation_drawer_position;    / ** *根据设计准则,你应该能显示在推出的抽屉,直到*用户手动对其进行了扩展。这种共享preference跟踪此。 * /私有静态最后弦乐preF_USER_LEARNED_DRAWER =navigation_drawer_learned;    / ** *的指针当前回调实例(活动)。
* /私人NavigationDrawerCallbacks mCallbacks;    / ** *是关系操作栏中的导航抽屉助手组件。 * /私人ActionBarDrawerToggle mDrawerToggle;    私人DrawerLayout mDrawerLayout;私人的ListView mDrawerListView;私人查看mFragmentContainerView;    私人INT mCurrentSelectedPosition = 0;私人布尔mFromSavedInstanceState;私人布尔mUserLearnedDrawer;    公共NavigationDrawerFragment(){}    @覆盖公共无效的onCreate(捆绑savedInstanceState){super.onCreate(savedInstanceState);        //读取在该标志指示用户是否已经证实//所述//抽屉的认识。详情请参阅preF_USER_LEARNED_DRAWER。共享preferences SP = preferenceManager
                .getDefaultShared preferences(getActivity()); mUserLearnedDrawer = sp.getBoolean(preF_USER_LEARNED_DRAWER,FALSE);        如果(savedInstanceState!= NULL){mCurrentSelectedPosition = savedInstanceState
                    .getInt(STATE_SELECTED_POSITION); mFromSavedInstanceState = TRUE; }        //选择任一默认项(0)或最后选择的项目。选择信息(mCurrentSelectedPosition);
            }    onActivityCreated(捆绑savedInstanceState){super.onActivityCreated(savedInstanceState)@覆盖公共无效; //表明该片段想影响集操作栏//行动。 setHasOptionsMenu(真); }    @覆盖公共查看onCreateView(LayoutInflater充气器,容器的ViewGroup,捆绑savedInstanceState){mDrawerListView
=(ListView控件)inflater.inflate(
                R.layout.fragment_navigation_drawer,集装箱,FALSE);
                mDrawerListView
                .setOnItemClickListener(新AdapterView.OnItemClickListener(){
                    @覆盖
                    公共无效onItemClick(适配器视图<>母公司,观景,
                            INT位置,长的id){
                        选择信息(位置);
                    }
                }); mDrawerListView.setAdapter(新ArrayAdapter<串GT;(getActionBar()
                .getThemedContext(),android.R.layout.simple_list_item_1,
                android.R.id.text1,新的String [] {
                        的getString(R.string.title_section1)
                        的getString(R.string.title_section2)
                        的getString(R.string.title_section3)                })); mDrawerListView.setItemChecked(mCurrentSelectedPosition,真);        返回mDrawerListView; }
    公共布尔isDrawerOpen(){返回mDrawerLayout!= NULL
                &功放;&安培; mDrawerLayout.isDrawerOpen(mFragmentContainerView); }    / ** *这个片段的用户必须调用此方法来设置导航*抽屉式交互。 * * @参数fragmentId * Android的:在它的活动的布局这个片段的ID。 * @参数drawerLayout *包含此片段的UI的DrawerLayout。 * /公共无效设置(INT fragmentId,DrawerLayout drawerLayout){mFragmentContainerView = getActivity()findViewById(fragmentId)。 mDrawerLayout = drawerLayout;        //设置当抽屉打开// mDrawerLayout.setDrawerShadow(R.drawable.drawer_shadow着覆盖主要内容的自定义阴影,
                GravityCompat.START); //设置抽屉的列表视图与项目,然后点击监听器        动作条动作条= getActionBar(); actionBar.setDisplayHomeAsUpEnabled(真); actionBar.setHomeButtonEnabled(真);        // ActionBarDrawerToggle关系的正确的相互作用//抽屉式导航栏和操作栏的程序图标之间在一起。 mDrawerToggle =新ActionBarDrawerToggle(getActivity()/ *主机活动* / mDrawerLayout,/ * DrawerLayout对象* / R.drawable.custom_ic_drawer,/ *导航抽屉图像替换上插入符* / R.string.navigation_drawer_open,/ *
                                         *开放抽屉的说明
                                         *无障碍
                                         * / R.string.navigation_drawer_close / *
                                         *关闭抽屉的说明
                                         *无障碍
                                         * /){@覆盖公共无效onDrawerClosed(查看drawerView){
                super.onDrawerClosed(drawerView);
                如果(!isAdded()){
                    返回;
                }                。getActivity()supportInvalidateOptionsMenu(); //调用
                                                                //在prepareOptionsMenu()}            @覆盖公共无效onDrawerOpened(查看drawerView){
                super.onDrawerOpened(drawerView);
                如果(!isAdded()){
                    返回;
                }                如果(!mUserLearnedDrawer){
                    //用户手动打开抽屉;存储此标志
                    // prevent自动显示
                    //在未来自动导航的抽屉里。
                    mUserLearnedDrawer = TRUE;
                    共享preferences SP = preferenceManager
                            .getDefaultShared preferences(getActivity());
                    sp.edit()。putBoolean(preF_USER_LEARNED_DRAWER,真)
                            。承诺();
                }                。getActivity()supportInvalidateOptionsMenu(); //调用
                                                                //在prepareOptionsMenu()}};        //如果用户没有学习关于抽屉,打开它引入//他们的抽屉,每个//导航抽屉式设计准则。如果(mUserLearnedDrawer&安培;!&安培;!mFromSavedInstanceState){mDrawerLayout.openDrawer(mFragmentContainerView); }        //推迟code依赖于previous实例状态的恢复。 mDrawerLayout.post(新的Runnable(){@覆盖公共无效的run(){
                mDrawerToggle.syncState(); }});        mDrawerLayout.setDrawerListener(mDrawerToggle); }    私人无效选择信息(INT位置){mCurrentSelectedPosition =位置;如果(mDrawerListView!= NULL){mDrawerListView.setItemChecked(位置,真正的); }如果(mDrawerLayout!= NULL){mDrawerLayout.closeDrawer(mFragmentContainerView); }如果(mCallbacks!= NULL){mCallbacks.onNavigationDrawerItemSelected(位置); }}    @覆盖公共无效onAttach(活动活动){super.onAttach(活动);尝试{mCallbacks =(NavigationDrawerCallbacks)活性; }赶上(抛出ClassCastException五){抛出新ClassCastException异常(
                    活动必须实现NavigationDrawerCallbacks。); }}    @覆盖公共无效onDetach(){super.onDetach(); mCallbacks
= NULL; }    @覆盖公共无效的onSaveInstanceState(捆绑outState){super.onSaveInstanceState(outState); outState.putInt(STATE_SELECTED_POSITION,mCurrentSelectedPosition); }    @覆盖公共无效onConfigurationChanged(配置NEWCONFIG){super.onConfigurationChanged(NEWCONFIG); //转发新配置抽屉切换组件。 mDrawerToggle.onConfigurationChanged(NEWCONFIG); }    @覆盖公共无效onCreateOptionsMenu(菜单菜单,MenuInflater吹气){//如果抽屉被打开,显示在操作栏中的应用程序的全球行动。 //参见// showGlobalContextActionBar,控制//操作栏的左上角区域。如果(mDrawerLayout =空&放大器;!&放大器; isDrawerOpen()){inflater.inflate(R.menu.global,菜单); showGlobalContextActionBar(); } super.onCreateOptionsMenu(菜单,充气器); }    @覆盖公共布尔onOptionsItemSelected(菜单项项){如果(mDrawerToggle.onOptionsItemSelected(项目)){返回true; }        如果(item.getItemId()== R.id.action_example){Toast.makeText(getActivity(),实施例的动作。,Toast.LENGTH_SHORT)
                    。显示();返回true; }        返回super.onOptionsItemSelected(项目); }    / ** *每导航抽屉式设计的指导方针,更新操作栏*显示全局应用语境,而不仅仅是什么是在目前的*屏幕。 * /私人无效showGlobalContextActionBar(){动作条动作条= getActionBar(); actionBar.setDisplayShowTitleEnabled(真); actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_STANDARD); actionBar.setTitle(R.string.selectStr); }    私有动作条getActionBar(){回报((ActionBarActivity)getActivity())getSupportActionBar()。 }    / ** *回调接口,使用这个片段的所有活动必须实现*。 * /公共静态界面NavigationDrawerCallbacks {/ ** *当选择导航抽屉项目时调用。 * /无效onNavigationDrawerItemSelected(INT位置); }}


解决方案

有一个

  mUserLearnedDrawer = sp.getBoolean(preF_USER_LEARNED_DRAWER,FALSE);

更改,code到下列之一

  mUserLearnedDrawer = TRUE;

  mUserLearnedDrawer = sp.getBoolean(preF_USER_LEARNED_DRAWER,真正的);

或者你可以删除,如果抽屉被打开,或不能在第一时间检查完全逻辑时,应用程序运行和相关的code到它(mUserLearnedDrawer变量等)

 如果(!mUserLearnedDrawer){
                    //用户手动打开抽屉;存储此标志
                    // prevent自动显示
                    //在未来自动导航的抽屉里。
                    mUserLearnedDrawer = TRUE;
                    共享preferences SP = preferenceManager
                            .getDefaultShared preferences(getActivity());
                    sp.edit()。putBoolean(preF_USER_LEARNED_DRAWER,真)
                            。承诺();
                }

I have developed an application with Navigation Drawer. Whenever the application starts for the first time, it has navigation drawer open.

Is there any way I can set it as closed? Below is the auto generated code for your understanding.

import com.example.navigationdrawer.R;

import android.support.v7.app.ActionBarActivity; import android.app.Activity; import android.support.v7.app.ActionBar; import android.support.v4.app.Fragment; import android.support.v4.app.ActionBarDrawerToggle; import android.support.v4.view.GravityCompat; import android.support.v4.widget.DrawerLayout; import android.content.SharedPreferences; import android.content.res.Configuration; import android.os.Bundle; import android.preference.PreferenceManager; import android.view.LayoutInflater; import android.view.Menu; import android.view.MenuInflater; import android.view.MenuItem; import android.view.View; import android.view.ViewGroup; import android.widget.AdapterView; import android.widget.ArrayAdapter; import android.widget.ListView; import android.widget.Toast;

/**  * Fragment used for managing interactions for and presentation of a navigation  * drawer. See the <a href=  * "https://developer.android.com/design/patterns/navigation-drawer.html#Interaction"
* > design guidelines</a> for a complete explanation of the behaviors  * implemented here.  */ public class NavigationDrawerFragment extends Fragment {

    /**      * Remember the position of the selected item.   */     private static final String STATE_SELECTED_POSITION = "selected_navigation_drawer_position";

    /**      * Per the design guidelines, you should show the drawer on launch until the     * user manually expands it. This shared preference tracks this.     */     private static final String PREF_USER_LEARNED_DRAWER = "navigation_drawer_learned";

    /**      * A pointer to the current callbacks instance (the Activity).  
*/  private NavigationDrawerCallbacks mCallbacks;

    /**      * Helper component that ties the action bar to the navigation drawer.   */     private ActionBarDrawerToggle mDrawerToggle;

    private DrawerLayout mDrawerLayout;     private ListView mDrawerListView;   private View mFragmentContainerView;

    private int mCurrentSelectedPosition = 0;   private boolean mFromSavedInstanceState;    private boolean mUserLearnedDrawer;

    public NavigationDrawerFragment() {     }

    @Override   public void onCreate(Bundle savedInstanceState) {       super.onCreate(savedInstanceState);

        // Read in the flag indicating whether or not the user has demonstrated         // awareness of the         // drawer. See PREF_USER_LEARNED_DRAWER for details.        SharedPreferences sp = PreferenceManager
                .getDefaultSharedPreferences(getActivity());        mUserLearnedDrawer = sp.getBoolean(PREF_USER_LEARNED_DRAWER, false);

        if (savedInstanceState != null) {           mCurrentSelectedPosition = savedInstanceState
                    .getInt(STATE_SELECTED_POSITION);           mFromSavedInstanceState = true;         }

        // Select either the default item (0) or the last selected item.        selectItem(mCurrentSelectedPosition);
            }

    @Override   public void onActivityCreated(Bundle savedInstanceState) {      super.onActivityCreated(savedInstanceState);        // Indicate that this fragment would like to influence the set of       // actions in the action bar.       setHasOptionsMenu(true);    }

    @Override   public View onCreateView(LayoutInflater inflater, ViewGroup container,          Bundle savedInstanceState) {        mDrawerListView
= (ListView) inflater.inflate(
                R.layout.fragment_navigation_drawer, container, false);
                mDrawerListView
                .setOnItemClickListener(new AdapterView.OnItemClickListener() {
                    @Override
                    public void onItemClick(AdapterView<?> parent, View view,
                            int position, long id) {
                        selectItem(position);
                    }
                });         mDrawerListView.setAdapter(new ArrayAdapter<String>(getActionBar()
                .getThemedContext(), android.R.layout.simple_list_item_1,
                android.R.id.text1, new String[] {
                        getString(R.string.title_section1),
                        getString(R.string.title_section2),
                        getString(R.string.title_section3),

                }));        mDrawerListView.setItemChecked(mCurrentSelectedPosition, true);

        return mDrawerListView;     }


    public boolean isDrawerOpen() {         return mDrawerLayout != null
                && mDrawerLayout.isDrawerOpen(mFragmentContainerView);  }

    /**      * Users of this fragment must call this method to set up the navigation     * drawer interactions.      *   * @param fragmentId     *      The android:id of this fragment in its activity's layout.    * @param drawerLayout   *            The DrawerLayout containing this fragment's UI.    */     public void setUp(int fragmentId, DrawerLayout drawerLayout) {      mFragmentContainerView = getActivity().findViewById(fragmentId);        mDrawerLayout = drawerLayout;

        // 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

        ActionBar actionBar = getActionBar();       actionBar.setDisplayHomeAsUpEnabled(true);      actionBar.setHomeButtonEnabled(true);

        // ActionBarDrawerToggle ties together the the proper interactions      // between the navigation drawer and the action bar app icon.       mDrawerToggle = new ActionBarDrawerToggle(getActivity(), /* host Activity */        mDrawerLayout, /* DrawerLayout object */        R.drawable.custom_ic_drawer, /* nav drawer image to replace 'Up' caret */       R.string.navigation_drawer_open, /*
                                         * "open drawer" description for
                                         * accessibility
                                         */         R.string.navigation_drawer_close /*
                                         * "close drawer" description for
                                         * accessibility
                                         */         ) {             @Override           public void onDrawerClosed(View drawerView) {
                super.onDrawerClosed(drawerView);
                if (!isAdded()) {
                    return;
                }

                getActivity().supportInvalidateOptionsMenu(); // calls
                                                                // onPrepareOptionsMenu()           }

            @Override           public void onDrawerOpened(View drawerView) {
                super.onDrawerOpened(drawerView);
                if (!isAdded()) {
                    return;
                }

                if (!mUserLearnedDrawer) {
                    // The user manually opened the drawer; store this flag to
                    // prevent auto-showing
                    // the navigation drawer automatically in the future.
                    mUserLearnedDrawer = true;
                    SharedPreferences sp = PreferenceManager
                            .getDefaultSharedPreferences(getActivity());
                    sp.edit().putBoolean(PREF_USER_LEARNED_DRAWER, true)
                            .commit();
                }

                getActivity().supportInvalidateOptionsMenu(); // calls
                                                                // onPrepareOptionsMenu()           }       };

        // If the user hasn't 'learned' about the drawer, open it to introduce      // them to the drawer,      // per the navigation drawer design guidelines.         if (!mUserLearnedDrawer && !mFromSavedInstanceState) {          mDrawerLayout.openDrawer(mFragmentContainerView);       }

        // Defer code dependent on restoration of previous instance state.      mDrawerLayout.post(new Runnable() {             @Override           public void run() {
                mDrawerToggle.syncState();          }       });

        mDrawerLayout.setDrawerListener(mDrawerToggle);     }

    private void selectItem(int position) {         mCurrentSelectedPosition = position;        if (mDrawerListView != null) {          mDrawerListView.setItemChecked(position, true);         }       if (mDrawerLayout != null) {            mDrawerLayout.closeDrawer(mFragmentContainerView);      }       if (mCallbacks != null) {           mCallbacks.onNavigationDrawerItemSelected(position);        }   }

    @Override   public void onAttach(Activity activity) {       super.onAttach(activity);       try {           mCallbacks = (NavigationDrawerCallbacks) activity;      } catch (ClassCastException e) {            throw new ClassCastException(
                    "Activity must implement NavigationDrawerCallbacks.");      }   }

    @Override   public void onDetach() {        super.onDetach();       mCallbacks
= null;     }

    @Override   public void onSaveInstanceState(Bundle outState) {      super.onSaveInstanceState(outState);        outState.putInt(STATE_SELECTED_POSITION, mCurrentSelectedPosition);     }

    @Override   public void onConfigurationChanged(Configuration newConfig) {       super.onConfigurationChanged(newConfig);        // Forward the new configuration the drawer toggle component.       mDrawerToggle.onConfigurationChanged(newConfig);    }

    @Override   public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {         // If the drawer is open, show the global app actions in the action bar.        // See also         // showGlobalContextActionBar, which controls the top-left area of the      // action bar.      if (mDrawerLayout != null && isDrawerOpen()) {          inflater.inflate(R.menu.global, menu);          showGlobalContextActionBar();       }       super.onCreateOptionsMenu(menu, inflater);  }

    @Override   public boolean onOptionsItemSelected(MenuItem item) {       if (mDrawerToggle.onOptionsItemSelected(item)) {            return true;        }

        if (item.getItemId() == R.id.action_example) {          Toast.makeText(getActivity(), "Example action.", Toast.LENGTH_SHORT)
                    .show();            return true;        }

        return super.onOptionsItemSelected(item);   }

    /**      * Per the navigation drawer design guidelines, updates the action bar to    * show the global app 'context', rather than just what's in the current     * screen.   */     private void showGlobalContextActionBar() {         ActionBar actionBar = getActionBar();       actionBar.setDisplayShowTitleEnabled(true);         actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_STANDARD);        actionBar.setTitle(R.string.selectStr);     }

    private ActionBar getActionBar() {      return ((ActionBarActivity) getActivity()).getSupportActionBar();   }

    /**      * Callbacks interface that all activities using this fragment must      * implement.    */     public static interface NavigationDrawerCallbacks {         /**          * Called when an item in the navigation drawer is selected.         */         void onNavigationDrawerItemSelected(int position);  } }

解决方案

There is a

mUserLearnedDrawer = sp.getBoolean(PREF_USER_LEARNED_DRAWER, false);

change that code to the one of the followings

mUserLearnedDrawer = true;

or

mUserLearnedDrawer = sp.getBoolean(PREF_USER_LEARNED_DRAWER, true);

Or you can remove completely the logic of checking if the drawer is opened or not at the first time when the app runs and the related code to it (mUserLearnedDrawer variable and so on)

 if (!mUserLearnedDrawer) {
                    // The user manually opened the drawer; store this flag to
                    // prevent auto-showing
                    // the navigation drawer automatically in the future.
                    mUserLearnedDrawer = true;
                    SharedPreferences sp = PreferenceManager
                            .getDefaultSharedPreferences(getActivity());
                    sp.edit().putBoolean(PREF_USER_LEARNED_DRAWER, true)
                            .commit();
                }

这篇关于关闭导览在应用程序启动的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆