0

J'essaie d'avoir 2 options de thème pour mon application, Dark and Light. Lorsque le thème sombre est sélectionné, j'utilise sharedpreference pour enregistrer et appliquer le thème au démarrage. Mais lorsque je tente de changer la couleur d'arrière-plan de la barre d'outils & appBarLayout comme ceci:Modifier la barre d'outils et AppBarLayout Contexte 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 renvoie l'erreur: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.support.v7.widget.Toolbar.setBackgroundColor(int)' on a null object reference

Et je ne peux pas comprendre pourquoi

Mise à jour: Correction en utilisant la répondez depuis @Nilesh Rathod et changez le thème de l'activité avant de définir la vue du contenu, puis après avoir défini la vue du contenu en changeant le thème de la barre d'outils et AppBarLayout.

+0

barre d'outils Barre d'outils = (barre d'outils) findViewById (R.id.toolbar); Vous avez manqué R ici. –

Répondre

1

Vous avez manqué R dans findViewById de barre d'outils

il devrait comme ci-dessous

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

changer votre code comme celui-ci

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

Renvoie toujours 'java.lang.NullPointerException: Tentative d'invocation de la méthode virtuelle 'void android.support.v7.widget.Toolbar.setBackgroundColor (int)' sur une référence d'objet null' –

+1

@DanielArena ajoutez votre fichier xml à la question –

+1

@DanielArena ce qui est ActionbarDark –