2010-11-17 4 views
0

J'ai une application qui définit le contenuView lorsque l'on clique sur des images. Celle-ci de mon fichier main.xml charge bien le fichier options.xml.L'application se bloque lors de l'ajout de clickListener

settings.setOnClickListener(new OnClickListener(){ 

      @Override 
      public void onClick(View v) { 
       setContentView(R.layout.options); 

      } 

     }); 

Mais quand j'ajoute un auditeur à une image qui se trouve dans la options.xml les application se bloque sur launch.I am référencent l'image via le code ci-dessous et montrant le clickListener j'ajoute. Essayer de voir si une erreur s'est produite mais LogCat ne semble pas afficher quoi que ce soit.

+1

Si l'application plante avec ce code, LogCat capturerait 99% (sinon 100) de l'exception. Essayez de mettre un point d'arrêt là pour voir si c'est vraiment cette ligne qui cause le problème. – xandy

+0

Je ne sais pas comment déboguer mais LogCat attrape quelque chose. Il dit ce qui suit où 120 est la ligne sur laquelle j'ai le code. – James

+0

java.lang.NullPointerException – James

Répondre

0

findViewById pour l'image returnHome est dans le contexte de l'application.

Si dans votre applicaiton onCreate() vous définissez setContentView(R.layout.main); lorsque vous appelez findViewById il regardera main.xml pour l'image returnHome, ce qui est évidemment pas là parce que son sur options.xml, par conséquent, vous obtiendrez un NullPointerException, parce que si l'on peut Ne trouvez pas ce que vous demandez.

Au lieu de déclarer l'auditeur d'image pour returnHome dans le contexte de main.xml essayer de le faire après avoir changé la mise en page, peut-être comme méthode:

private void changeView() 
{ 
    setContentView(R.layout.options); 
    returnHome = (ImageView)findViewById(R.id.returnHome); 
    returnHome.setOnClickListener(new OnClickListener() 
    { 
     @Override 
     public void onClick(View v) 
     { 
      // Perform whatever..... 
     } 
    }); 
} 

Ensuite, changez le premier auditeur onclick:

settings.setOnClickListener(new OnClickListener() 
{ 
    @Override 
    public void onClick(View v) 
    { 
     changeView(); 
    } 
}); 
+0

Ça semble fonctionner Merci – James

Questions connexes