2014-03-26 36 views
0

我跟着thisthis問題創建與操作欄compat(與v7庫)的BaseActivity,這將由其他活動擴展。操作欄不會顯示在所有活動

當我將默認活動設置爲「BaseActivity」時,操作欄工作正常,但是當我將其擴展到另一個活動時,操作欄從不顯示,可以說HomeActivity。

onCreate代碼BaseActivity:

protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     //getSupportActionBar().setDisplayShowHomeEnabled(false); 
     //getSupportActionBar().setDisplayShowCustomEnabled(true); 
     // enabling action bar app icon and behaving it as toggle button 
     getSupportActionBar().setDisplayHomeAsUpEnabled(true); 
     getSupportActionBar().setHomeButtonEnabled(true); 

     mTitle = mDrawerTitle = getTitle(); 

     // load slide menu items 
     navMenuTitles = getResources().getStringArray(R.array.nav_drawer_items); 

     // nav drawer icons from resources 
     navMenuIcons = getResources() 
       .obtainTypedArray(R.array.nav_drawer_icons); 

     mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout); 
     mDrawerList = (ListView) findViewById(R.id.list_slidermenu); 

     navDrawerItems = new ArrayList<NavDrawerItem>(); 

     // adding nav drawer items to array 
     // Home 
     navDrawerItems.add(new NavDrawerItem(navMenuTitles[0], navMenuIcons.getResourceId(0, -1))); 
     // Find People 
     navDrawerItems.add(new NavDrawerItem(navMenuTitles[1], navMenuIcons.getResourceId(1, -1))); 
     // Photos 
     navDrawerItems.add(new NavDrawerItem(navMenuTitles[2], navMenuIcons.getResourceId(2, -1))); 
     // Communities, Will add a counter here 
     navDrawerItems.add(new NavDrawerItem(navMenuTitles[3], navMenuIcons.getResourceId(3, -1))); 
     // Pages 
     navDrawerItems.add(new NavDrawerItem(navMenuTitles[4], navMenuIcons.getResourceId(4, -1))); 
     // What's hot, We will add a counter here 
     navDrawerItems.add(new NavDrawerItem(navMenuTitles[5], navMenuIcons.getResourceId(5, -1))); 


     // Recycle the typed array 
     navMenuIcons.recycle(); 

     mDrawerList.setOnItemClickListener(new SlideMenuClickListener()); 

     // setting the nav drawer list adapter 
     adapter = new NavDrawerListAdapter(getApplicationContext(), 
       navDrawerItems); 
     mDrawerList.setAdapter(adapter); 

     mDrawerToggle = new ActionBarDrawerToggle(this, mDrawerLayout, 
       R.drawable.ic_drawer, //nav menu toggle icon 
       R.string.app_name, // nav drawer open - description for accessibility 
       R.string.app_name // nav drawer close - description for accessibility 
     ) { 
      public void onDrawerClosed(View view) { 
       getSupportActionBar().setTitle(mTitle); 
       // calling onPrepareOptionsMenu() to show action bar icons 
       invalidateOptionsMenu(); 
      } 

      public void onDrawerOpened(View drawerView) { 
       getSupportActionBar().setTitle(mDrawerTitle); 
       // calling onPrepareOptionsMenu() to hide action bar icons 
       invalidateOptionsMenu(); 
      } 
     }; 
     mDrawerLayout.setDrawerListener(mDrawerToggle); 

     if (savedInstanceState == null) { 
      // on first time display view for first nav item 
      displayView(0); 
     } 

    } 

onCreateOptionsMenu

@Override 

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

這是HomeActivity,請注意,我評論的onCreateOptionsMenu,因爲我已經擁有它的BaseActivity:

public class HomeActivity extends BaseActivity { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_home); 

     //getSupportActionBar().show(); 
    } 

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

} 

這是我的表現st:

<uses-sdk 
     android:minSdkVersion="11" 
     android:targetSdkVersion="18" /> 

    <application 
     android:allowBackup="true" 
     android:icon="@drawable/ic_whats_hot" 
     android:label="@string/app_name" 
     android:theme="@style/Theme.AppCompat.Light" > 

     <activity 
      android:name="com.test.testlivescore.BaseActivity" 
      android:label="base" > 
     </activity> 

     <activity 
      android:name="com.test.testlivescore.HomeActivity" 
      android:label="@string/title_activity_home" > 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 

       <category android:name="android.intent.category.LAUNCHER" /> 
      </intent-filter> 
     </activity> 
+0

我最好的猜測是在你的AndroidManifest.xml – sgarman

+0

@sgarman不正確的主題設置我已經列入我的問題清單,謝謝 –

+0

你不需要在BaseActivity中使用setContentView()。不要啓動這個活動,它只能作爲超類別的其他活動。並將其聲明爲「抽象」類。 –

回答

2

你的問題很簡單,但需要時間來找出根本原因。

當您使用supportActionBar方法時,您必須擴展ActionBarActivity。此活動包含在support library中。

ActionBarActivity docs

所以,你的代碼就變成了:

public class BaseActiivity extends ActionBarActivity{ 


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

     // actionbar Code 
    } 

} 

public class MainActivity extends BaseAcivity{ 
    //your code 
} 
+0

這可能是有道理的.. :) – Fllo

+0

非常感謝您的幫助! –