2015-04-06 163 views
0

DrawerActivity.java无法打开抽屉式导航

public class DrawerActivity extends MainActivity{ 
     private DrawerLayout mDrawerLayout; 
     private ListView mDrawerList; 
     private ActionBarDrawerToggle mDrawerToggle; 

     private CharSequence mDrawerTitle; 
     private CharSequence mTitle; 
     private String[] navMenuItems; 



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

      setContentView(R.layout.nav_drawer_menu); 

      mTitle = mDrawerTitle = getTitle(); 
      navMenuItems = getResources().getStringArray(R.array.nav_drawer_items_array); 
      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, navMenuItems)); 
      //mDrawerList.setOnItemClickListener(new DrawerItemClickListener()); 

      // enable ActionBar app icon to behave as action to toggle nav drawer 
      getSupportActionBar().setDisplayHomeAsUpEnabled(true); 
      getSupportActionBar().setHomeButtonEnabled(true); 

      // ActionBarDrawerToggle ties together the the proper interactions 
      // between the sliding drawer and the action bar app icon 
      mDrawerToggle = new ActionBarDrawerToggle(
        this,     /* host Activity */ 
        mDrawerLayout,   /* DrawerLayout object */ 
        R.drawable.ic_drawer, /* nav drawer image to replace 'Up' caret */ 
        R.string.drawer_open, /* "open drawer" description for accessibility */ 
        R.string.drawer_close /* "close drawer" description for accessibility */ 
      ) { 
       public void onDrawerClosed(View view) { 
        getSupportActionBar().setTitle(R.string.app_name); 
        invalidateOptionsMenu(); // creates call to onPrepareOptionsMenu() 
       } 

       public void onDrawerOpened(View drawerView) { 
        getSupportActionBar().setTitle("Menu"); 
        invalidateOptionsMenu(); // creates call to onPrepareOptionsMenu() 
       } 
      }; 
      mDrawerLayout.setDrawerListener(mDrawerToggle); 


     } 

     @Override 
     public boolean onCreateOptionsMenu(Menu menu) { 
      // Inflate the menu; this adds items to the action bar if it is present. 
      getMenuInflater().inflate(R.menu.menu_main, menu); 
      return true; 
     } 

     @Override 
     public boolean onOptionsItemSelected(MenuItem item) { 
      // The action bar home/up action should open or close the drawer. 
      // ActionBarDrawerToggle will take care of this. 
      if (mDrawerToggle.onOptionsItemSelected(item)) { 
       return true; 
      } 

      return super.onOptionsItemSelected(item); 
     } 


     /** 
     * When using the ActionBarDrawerToggle, you must call it during 
     * onPostCreate() and onConfigurationChanged()... 
     */ 

     @Override 
     protected void onPostCreate(Bundle savedInstanceState) { 
      super.onPostCreate(savedInstanceState); 
      // Sync the toggle state after onRestoreInstanceState has occurred. 
      mDrawerToggle.syncState(); 
     } 

     @Override 
     public void onConfigurationChanged(Configuration newConfig) { 
      super.onConfigurationChanged(newConfig); 
      // Pass any configuration change to the drawer toggls 
      mDrawerToggle.onConfigurationChanged(newConfig); 
     } 
    } 

HomePage.java

public class HomePage extends DrawerActivity { 

     public static boolean active = false; 
     private Connection con; 

     @Override 
     public void onCreate(Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 
      setContentView(R.layout.layout_home); 

      /* 
      try { 
       con = new ConnectDataBase().getCon(); 
       if (con == null) 
        Toast.makeText(getApplicationContext(), "con is null", Toast.LENGTH_LONG).show(); 
       con.close(); 
      }catch (Exception e){ 
       e.printStackTrace(); 
      } 
      */ 

     } 

当我在Android清单的主要活动是DrawerActivity,按下应用程序图标,当抽屉出来。但它不会出现在HomePage活动中,并且没有错误。怎么修?!

+0

对于DrawerActivity你给出一个布局一样(的菜单)和HomeActivity您给出不同的布局(没有菜单),那么它将如何显示这两个活动的菜单,所以根据它的布局,它会显示菜单 – Hanuman 2015-04-06 12:11:26

+0

我可以知道为什么你的DrawActivity扩展了MainActivity吗?或者你在MainActivity中做了什么代码? – 2015-04-06 12:28:36

+0

@AndroidWeblineindia只是关于行动栏,现在我已经把它们放在一起 – Jerryc 2015-04-06 13:44:43

回答

1

它是因为您在超类中使用了ActionBarDrawerTogglemDrawerList作为private,因此它们不会被您的子类继承!让他们public,然后尝试。

编辑

使用这条线在你的子类

super.onCreate(savedInstanceState); 
setContentView(R.layout.layout_home); 
super.onCreateDrawer(); // this line 

看看这个工程

+0

仍然无法正常工作,是所有这些都需要公开吗? – Jerryc 2015-04-06 13:42:50

+0

是的,他们都需要公开 – 2015-04-06 13:45:55

+0

我改变了,仍然不能修复 – Jerryc 2015-04-06 13:55:13