getActionBar始终返回null

时间:2014-05-16 13:35:47

标签: android android-actionbar android-actionbaractivity

在Android设备4.0.1上我试图使用ActionBar构建应用程序,但获取NullPointException。我尝试了以下解决方案:

  1. 将主题Theme.Holo.Light添加到应用程序主题。
  2. OnCreate的活动中,将ActionBar功能设置为setContentView requestWindowFeature(Window.FEATURE_ACTION_BAR)
  3. 已使用SherlockActivity并被称为getSupportActionBar()
  4. 但没有运气。在所有方法中,我得到null ActionBar。任何人都可以请指出我的问题是什么。我在这里粘贴ActivityAndroidManifest.xml

    的AndroidManifest.xml

    <code>
    <?xml version="1.0" encoding="utf-8"?>
    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
        package="com.tzoomers.birthdaysdiary"
        android:versionCode="1"
        android:versionName="1.0" >
    
    
        <uses-sdk
            android:minSdkVersion="11"
            android:targetSdkVersion="19" />
    
        <uses-permission android:name="android.permission.READ_CONTACTS"/>
        <uses-permission android:name="android.permission.CALL_PHONE" />
        <uses-permission android:name="android.permission.SEND_SMS" />
        <application
            android:allowBackup="true"
            android:icon="@drawable/ic_launcher"
            android:label="@string/app_name"
            android:theme="@android:style/Theme.Holo.Light">
            <activity
                android:name="com.tzoomers.birthdaysdiary.BirthdaysDiary"
                android:label="@string/app_name">
                <intent-filter>
                    <action android:name="android.intent.action.MAIN" />
    
                    <category android:name="android.intent.category.LAUNCHER" />
                </intent-filter>
            </activity>
    
            <activity android:name=".ContentActivity">
                <intent-filter>
                    <action android:name="android.intent.action.SEARCH" />
                    <category android:name="android.intent.category.DEFAULT" />
                </intent-filter>
            </activity>
            <activity android:name=".SyncActivity">
            </activity>
        </application>
    
    </manifest>
    
    </code>
    

    SyncActivity.java

    <code>    
    public class SyncActivity extends Activity{
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            // TODO Auto-generated method stub
            super.onCreate(savedInstanceState);
    
            getWindow().requestFeature(Window.FEATURE_ACTION_BAR);
    
            setContentView(R.layout.layout_sync_activity);
    
            ActionBar actionBar = getActionBar();
            if(actionBar != null)
            {
                getActionBar().setDisplayHomeAsUpEnabled(false);
            }
            else
            {
                Toast.makeText(this, "Action bar is null", Toast.LENGTH_SHORT).show();
            }
        }
    
    
        @Override
        public boolean onOptionsItemSelected(MenuItem item) {
            // TODO Auto-generated method stub
            return super.onOptionsItemSelected(item);
        }
    }
    

    请帮助解决问题,而不是指向urls。我已经尝试了所有的解决方案。如果我遗漏了XMLJAVA个文件中的内容,请指出。

    提前致谢。

1 个答案:

答案 0 :(得分:1)

我自己刚刚解决了这个问题,新的更新有点棘手,一些旧的修复工作不再适用。试试这个:

  1. 设置MainActivity Java代码以扩展ActionBarActivity

  2. 使用getSupportAcionBar();调用来检索您的操作栏

  3. 确保您的(自定义)TabListener扩展了android.support.v7.app.ActionBar.TabListener

  4. 您可以使用FragmentManager在选中和取消选中标签时添加和删除标签片段。

  5. 以下是我的一些代码片段,以帮助说明,希望它也适合您:)

    public class MainActivity extends ActionBarActivity 
    {
    
    @Override
    protected void onCreate(Bundle savedInstanceState) //Overrode Default Constructor
    {
        super.onCreate(savedInstanceState);
        android.support.v7.app.ActionBar tabsActionBar = getSupportActionBar();
       /***following changes ActionBar to a Tabbed ActionBar***/
        tabsActionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);`  
    
        android.support.v7.app.ActionBar.Tab tabArray = tabsActionBar.newTab();to later contain 'inflated' digitalClock (tabbed) UI
        tabArray.setText(R.string.tab_one);
        /***following sets clockTabListener private class as Listener for
         * this object***/
        tabArray.setTabListener( new clockTabListener( this, digitalClockFragment.class.getName() ) );//actual call to digitalClockFragment
        tabsActionBar.addTab(tabArray);//adds TabArray to Action Bar Tab(s)
        /******Second call for setting New Tab to AnalogClockFragment******/
        tabArray = tabsActionBar.newTab();
        tabArray.setText(R.string.tab_two);
        tabArray.setTabListener( new clockTabListener( this, analogClockFragment.class.getName() ) );//actual call to analogClockFragment
        tabsActionBar.addTab(tabArray);
    
    
    private class clockTabListener implements android.support.v7.app.ActionBar.TabListener
    {
    
        private final Activity currentActivity;
        private final String currentFragment;
        private Fragment launchFragment;
        private android.app.FragmentManager frgManager;
        public clockTabListener(Activity activityName, String fragmentName)
        {
        currentActivity = activityName;
        currentFragment = fragmentName;
        frgManager = getFragmentManager();
        }
    
        /******************************************************************/
        /******************************************************************/
        /******************************************************************/
        @Override
        public void onTabSelected(android.support.v7.app.ActionBar.Tab arg0,
                android.support.v4.app.FragmentTransaction arg1) 
        {
            launchFragment = Fragment.instantiate(currentActivity, currentFragment);
            frgManager.beginTransaction().replace(android.R.id.content, launchFragment).commit();
        }