2

在 android 设备 4.0.1 上,我正在尝试使用ActionBar但获取NullPointException. 我尝试了以下解决方案:

  1. 将主题添加Theme.Holo.Light到应用程序主题。
  2. OnCreateActivity 中,设置ActionBarfeature 之前setContentViewrequestWindowFeature(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>

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文件中遗漏了什么,请指出。

提前致谢。

4

1 回答 1

1

我只是自己解决了这个问题,新的更新有点棘手,一些旧的修复程序不再有效。尝试这个:

  1. 设置您的MainActivityJava 代码以扩展ActionBarActivity

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

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

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

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

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();
    }
于 2014-12-24T21:30:06.330 回答