简体   繁体   English

java.lang.NullPointerException:尝试在空对象引用上调用虚方法'ActionBar.setNavigationMode(int)'

[英]java.lang.NullPointerException: Attempt to invoke virtual method 'ActionBar.setNavigationMode(int)' on a null object reference

I am getting this error at runtime. 我在运行时收到此错误。

java.lang.NullPointerException: Attempt to invoke virtual method 'void android.support.v7.app.ActionBar.setNavigationMode(int)' on a null object reference

Main Activity.java 主Activity.java

    public class MainActivity <T extends Fragment> extends ActionBarActivity implements ListView.OnItemClickListener
    {  
    @Override
    protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    ActionBar actionBar = getSupportActionBar();

    actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
    actionBar.setDisplayShowTitleEnabled(false);

    ActionBar.Tab tab;
    tab = actionBar.newTab()
            .setText("Categories")
            .setTabListener(new TabListener<CategoriesFragment>(
                    this, "Categories", CategoriesFragment.class));
    actionBar.addTab(tab);

    tab = actionBar.newTab()
            .setText("Acceuil")
            .setTabListener(new TabListener<AcceuilFragment>(
                    this, "Acceuil", AcceuilFragment.class));
    actionBar.addTab(tab);
    tab = actionBar.newTab()
            .setText("Topics")
            .setTabListener(new TabListener<TopicsFragment>(
                    this, "Topics", TopicsFragment.class));
    actionBar.addTab(tab);

    tab = actionBar.newTab()
            .setText("Tendances")
            .setTabListener(new TabListener<TendancesFragment>(
                    this, "Tendances", TendancesFragment.class));
    actionBar.addTab(tab);

    setRef();

    //Set the custom toolbar
    if (toolbar != null)
    {
        toolbar.setTitle(R.string.app_name);
        setSupportActionBar(toolbar);
    }

    drawerToggle = new ActionBarDrawerToggle(
            this,
            drawerLayout,
            toolbar,
            R.string.open,
            R.string.close
    )

    {
        public void onDrawerClosed(View view)
        {
            Log.d("MainActivity", "OnDrawerClosed");
            super.onDrawerClosed(view);
            invalidateOptionsMenu();
        }

        public void onDrawerOpened(View drawerView)
        {
            Log.d("MainActivity", "OnDrawerOpened");
            super.onDrawerOpened(drawerView);
            invalidateOptionsMenu();
        }
    };

    drawerLayout.setDrawerListener(drawerToggle);

    getSupportActionBar().setDisplayHomeAsUpEnabled(true);

    // use this setting to improve performance if you know that changes
    // in content do not change the layout size of the RecyclerView
    mRecyclerView.setHasFixedSize(true);

    // use a linear layout manager
    mLayoutManager = new LinearLayoutManager(this);
    mRecyclerView.setLayoutManager(mLayoutManager);
    mRecyclerView.setItemAnimator(new DefaultItemAnimator());

    // specify an adapter (see also next example)
    mAdapter = new MyAdapter(myDataset);
    mRecyclerView.setAdapter(mAdapter);


}

@Override
protected void onPostCreate(Bundle savedInstanceState) {
    super.onPostCreate(savedInstanceState);
    drawerToggle.syncState();
}

private void setRef()
{
    // create reference to the xml views
    mRecyclerView = (android.support.v7.widget.RecyclerView) findViewById(R.id.my_recycler_view);
    fab = (Button) findViewById(R.id.addButton);
    drawerLayout = (android.support.v4.widget.DrawerLayout) findViewById(R.id.drawer_layout);
    drawerLayout.setStatusBarBackground(R.color.primarydark);

    toolbar = (android.support.v7.widget.Toolbar) findViewById(R.id.toolbar);
    leftDrawerList = (ListView) findViewById(R.id.list_drawer);

    View list_header = getLayoutInflater().inflate(R.layout.drawerlist_header, null);
    leftDrawerList.addHeaderView(list_header);
    navigationDrawerAdapter = new ArrayAdapter<String>(MainActivity.this, android.R.layout.simple_expandable_list_item_1, leftSliderData);
    leftDrawerList.setAdapter(navigationDrawerAdapter);
    leftDrawerList.setOnItemClickListener(this);
}

@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id)
{
    Toast.makeText(getApplicationContext(), "Clicked on " + leftSliderData[position - 1], Toast.LENGTH_LONG).show();
}

public void onTabSelected(ActionBar.Tab tab, FragmentTransaction ft) {
    // Check if the fragment is already initialized
    if (mFragment == null) {
        // If not, instantiate and add it to the activity
        mFragment = Fragment.instantiate(mActivity, mClass.getName());
        ft.add(android.R.id.content, mFragment, mTag);
    } else {
        // If it exists, simply attach it in order to show it
        ft.attach(mFragment);
    }
}

public void onTabUnselected(ActionBar.Tab tab, FragmentTransaction ft) {
    if (mFragment != null) {
        // Detach the fragment, because another one is being attached
        ft.detach(mFragment);
    }
}

public void onTabReselected(ActionBar.Tab tab, FragmentTransaction ft) {
    // User selected the already selected tab. Usually do nothing.
    }
}

activity_main.xml activity_main.xml中

<?xml version="1.0" encoding="utf-8"?>
<android.support.v4.widget.DrawerLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/drawer_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true"
tools:context=".MainActivity">

<!-- Setting this one to true makes the status bar
    to have a non-transparent shitty background -->

<!--
     As the main content view, the view below consumes the entire
     space available using match_parent in both dimensions.
-->

<FrameLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:fitsSystemWindows="false">

    <include layout="@layout/actionbarlayout"></include>

    <include layout="@layout/content_view"></include>

    <Button
        android:id="@+id/addButton"
        android:text="+"
        android:textSize="25sp"
        android:textColor="@android:color/white"
        android:textAlignment="center"
        android:layout_marginRight="15dp"
        android:layout_marginBottom="15dp"
        android:background="@drawable/circlebtn"
        android:layout_width="56dp"
        android:layout_height="56dp"
        android:stateListAnimator="@animator/anim"
        android:elevation="4dp"
        style="?android:buttonStyleSmall"
        android:layout_gravity="right|bottom" >
    </Button>

</FrameLayout>

<com.androprogrammer.test.materialapp1.ScrimInsetsFrameLayout
    android:id="@+id/container"
    android:layout_width="wrap_content"
    android:layout_height="match_parent"
    android:fitsSystemWindows="true"
    android:elevation="8dp"
    android:layout_gravity="start"
    app:insetForeground="#4000">

    <ListView
        android:id="@+id/list_drawer"
        android:layout_width="@dimen/drawer_width"
        android:layout_height="match_parent"
        android:choiceMode="singleChoice"
        android:background="@android:color/white"
        android:fitsSystemWindows="true">
    </ListView>

</com.androprogrammer.test.materialapp1.ScrimInsetsFrameLayout>
</android.support.v4.widget.DrawerLayout>

values/styles.xml 价值观/ styles.xml

<resources>

<!-- Base application theme. -->
<style name="AppTheme" parent="AppTheme.Base"/>

<style name="AppTheme.Base" parent="Theme.AppCompat.Light">
    <item name="colorPrimary">@color/primary</item>
    <item name="colorPrimaryDark">@color/primarydark</item>
    <item name="colorAccent">@color/primary</item>
    <item name="colorControlHighlight">@color/primary</item>
    <item name="android:windowNoTitle">true</item>
    <item name="windowActionBar">false</item>
    <item name="drawerArrowStyle">@style/DrawerArrowStyle</item>
    <item name="windowActionModeOverlay">true</item>

</style>

<style name="DrawerArrowStyle" parent="Widget.AppCompat.DrawerArrowToggle">
    <item name="spinBars">true</item>
    <item name="color">@android:color/white</item>
</style>
</resources>

v21/styles.xml V21 / styles.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>
<style name="AppTheme" parent="AppTheme.Base">
    <item name="android:windowDrawsSystemBarBackgrounds">true</item>
    <item name="android:statusBarColor">@android:color/transparent</item>
    <item name="android:windowContentTransitions">true</item>
    <item name="android:windowAllowEnterTransitionOverlap">true</item>
    <item name="android:windowAllowReturnTransitionOverlap">true</item>
    <item name="android:windowSharedElementEnterTransition">@android:transition/move</item>
    <item name="android:windowSharedElementExitTransition">@android:transition/move</item>

</style>
</resources>

AndroidManifest.xml AndroidManifest.xml中

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.androprogrammer.test.materialapp1" >

<application
    android:allowBackup="true"
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name"
    android:theme="@style/AppTheme" >
    <activity
        android:name=".MainActivity"
        android:label="@string/app_name" >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

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

</manifest>

Help Please :) 请帮助 :)

Try to change the parent style 尝试更改父样式

<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">

and ActionBarActivity is deprecated, you should use AppCompatActivity 不推荐使用ActionBarActivity ,您应该使用AppCompatActivity

In your style.xml you have to have the actionbar enabled. 在style.xml中,您必须启用操作栏。 If the actionbar is disabled (set to false) then it will not be added in to the activity at runtime (ie getActionBar() returns null ). 如果禁用操作栏(设置为false),则不会在运行时将其添加到活动中(即getActionBar()返回null )。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 java.lang.NullPointerException:尝试在空对象引用上调用虚拟方法FloatingActionButton.setImageResource(int)&#39; - java.lang.NullPointerException: Attempt to invoke virtual method FloatingActionButton.setImageResource(int)' on a null object reference java.lang.NullPointerException:尝试在 null ZA8CFDE6331BD54B66AC96F8911 参考上调用虚拟方法 'void androidx.appcompat.app.ActionBar.hide()' - java.lang.NullPointerException: Attempt to invoke virtual method 'void androidx.appcompat.app.ActionBar.hide()' on a null object reference 引起:java.lang.NullPointerException: Attempt to invoke virtual method &#39;void android.view.View.setVisibility(int)&#39; on a null object reference - Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.view.View.setVisibility(int)' on a null object reference java.lang.NullPointerException:尝试在空对象引用上调用虚拟方法“int java.io.InputStream.read(byte[])” - java.lang.NullPointerException: Attempt to invoke virtual method 'int java.io.InputStream.read(byte[])' on a null object reference java.lang.NullPointerException:尝试在 oncreate 方法中对空对象引用调用虚拟方法 - java.lang.NullPointerException: Attempt to invoke virtual method on a null object reference in oncreate method java.lang.NullPointerException:尝试在空对象引用上调用虚方法&#39;int android.view.ViewGroup.getPaddingLeft()&#39; - java.lang.NullPointerException: Attempt to invoke virtual method 'int android.view.ViewGroup.getPaddingLeft()' on a null object reference java.lang.NullPointerException:尝试在空对象引用上调用虚拟方法“ void android.widget.CardView.setVisibility(int)” - java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.CardView.setVisibility(int)' on a null object reference java.lang.NullPointerException: Attempt to invoke virtual method 'int android.view.View.getBottom()' on a null object reference - java.lang.NullPointerException: Attempt to invoke virtual method 'int android.view.View.getBottom()' on a null object reference java.lang.NullPointerException:尝试在空对象引用上调用虚方法'android.view.View .MainActivity.findViewById(int)' - java.lang.NullPointerException: Attempt to invoke virtual method 'android.view.View .MainActivity.findViewById(int)' on a null object reference java.lang.NullPointerException:尝试在空对象引用上调用虚方法,而它不为空 - java.lang.NullPointerException: Attempt to invoke virtual method on a null object reference, while its not null
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM