更改工具栏& AppBarLayout背景onCreate

时间:2017-07-22 05:52:48

标签: android nullpointerexception android-toolbar android-appbarlayout

我正在尝试为我的应用设置2个主题选项,Dark and Light。选择黑暗主题后,我使用共享首选项在启动时保存并应用主题。但是当我尝试更改工具栏的背景颜色时appBarLayout是这样的:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    SharedPreferences sharedPref = getPreferences(Context.MODE_PRIVATE);
    long currentTheme = sharedPref.getInt(getString(string.current_theme), 0);
    if (currentTheme == 0) {
        this.setTheme(R.style.AppTheme_NoActionBar);
    }
    if (currentTheme == 1) {
        this.setTheme(R.style.AppTheme_NoActionBar_Dark);
        Toolbar toolbar = (Toolbar) findViewById(id.toolbar);
        setSupportActionBar(toolbar);
        toolbar.setBackgroundColor(getResources().getColor(ActionbarDark));
    }

Logcat返回错误:java.lang.NullPointerException: Attempt to invoke virtual method 'void android.support.v7.widget.Toolbar.setBackgroundColor(int)' on a null object reference

我不明白为什么

更新:通过使用@Nilesh Rathod的答案并在设置内容视图之前更改活动的主题,然后在设置内容视图更改工具栏和AppBarLayout的主题后修复它。

1 个答案:

答案 0 :(得分:1)

您错过了findViewById工具栏中的R

它应该在下面

Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);

像这样更改您的代码

Toolbar toolbar;
    @Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    toolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);
    SharedPreferences sharedPref = getPreferences(Context.MODE_PRIVATE);
    long currentTheme = sharedPref.getInt(getString(string.current_theme), 0);
    if (currentTheme == 0) {
        this.setTheme(R.style.AppTheme_NoActionBar);

    }
    if (currentTheme == 1) {
        this.setTheme(R.style.AppTheme_NoActionBar_Dark);
        getSupportActionBar().setBackgroundDrawable(new ColorDrawable(0xff00DDED));
    }
    setContentView(R.layout.activity_main);
    registerReceiver(onComplete, new IntentFilter(DownloadManager.ACTION_DOWNLOAD_COMPLETE));


    android.app.FragmentManager fragmentmanager = getFragmentManager();
    fragmentmanager.beginTransaction()
            .replace(R.id.content_frame
                    , new FirstFragment())
            .commit();

    DrawerLayout drawer = (DrawerLayout) findViewById(id.drawer_layout);
    ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(
            this, drawer, toolbar, string.navigation_drawer_open, string.navigation_drawer_close);
    drawer.setDrawerListener(toggle);
    toggle.syncState();

    NavigationView navigationView = (NavigationView) findViewById(id.nav_view);
    navigationView.setNavigationItemSelectedListener(this);
    navigationView.getMenu().getItem(0).setChecked(true);
}