android - getActionBar 总是返回 null

标签 android android-actionbar android-actionbaractivity

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

  1. 将主题 Theme.Holo.Light 添加到应用程序主题。
  2. 在Activity的OnCreate中,在setContentView之前设置ActionBar特性为requestWindowFeature(Window.FEATURE_ACTION_BAR)
  3. 使用了 SherlockActivity 并调用了 getSupportActionBar()

但运气不好。在所有方法中,我都得到了 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>

同步 Activity .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. 设置您的 MainActivity Java 代码以扩展 ActionBarActivity

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

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

  4. 您可以使用 FragmentManager 在选择和取消选择选项卡时添加和删除选项卡 fragment 。

这是我的一些代码 fragment 来帮助说明,希望它也对你有用:)

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();
    }

关于android - getActionBar 总是返回 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23696514/

相关文章:

javascript - Sendsms 插件不适用于 Phonegap

android - 如何在 Android 中将溢出菜单项显示到操作栏

Android PreferenceFragment : Setting status bar as per tool bar color

android - 将 appcompat 更新到 27.1 后,为什么我的 Android 导入语句 (ActionBarActivity) 会出现 'cannot find symbol class' 错误?

android - 如何通过ID在Android中打开名片

Android GUI架构——Surface/view/window/canvas之间的关系

java - 安卓工作室 : message "Configure project in Project Structure dialog"

Android 操作栏搜索 : How to filter a list by the property of a list item?

android - Android 4.2 中的操作栏图标大小

Android 支持 v7 ActionBar SearchView 未完全展开