0

Ich versuche, 2 Themenoptionen für meine App, Dark und Light. Wenn das dunkle Thema ausgewählt ist, verwende ich sharedreference, um das Thema beim Start zu speichern und anzuwenden. Aber wenn ich versuche, die Hintergrundfarbe der Symbolleiste & appBarLayout wie folgt zu ändern:Ändern der Toolbar & AppBarLayout Hintergrund onCreate

@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 gibt den Fehler: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.support.v7.widget.Toolbar.setBackgroundColor(int)' on a null object reference

Und ich kann nicht verstehen, warum

Update: es wird behoben durch die Verwendung von Antwort von @Nilesh Rathod und Ändern des Themas der Aktivität vor dem Einstellen der Inhaltsansicht, dann nach dem Festlegen der Inhaltsansicht Ändern des Themas der Symbolleiste und AppBarLayout.

+0

Toolbar Symbolleiste = (Toolbar) findViewById unten mögen sollte (R.id.toolbar); Du hast R hier verpasst. –

Antwort

1

Sie haben R in findViewById der Symbolleiste verpasst

es

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

Änderung wie der Code dieser

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); 
} 
+0

Gibt immer noch zurück 'java.lang.NullPointerException: Versuch, virtuelle Methode 'void android.support.v7.widget.Toolbar.setBackgroundColor (int)' auf einem Null-Objekt-Verweis aufzurufen ' –

+1

@DanielArena fügen Sie Ihre XML-Datei mit Frage –

+1

@DanielArena Was ist ActionbarDark –

Verwandte Themen