2014-04-18 10 views
0

(Modifié pour pouvoir comparer la chaîne) J'ai 1 TextView, et 2 boutons, un bouton est "Mois" l'autre bouton "Semaine". En essayant de changer le TextView en conséquence, appuyez sur le bouton appuyé par exemple Mois, Semaine Lorsque je lance l'activité pour la première fois, le "Mois" est affiché comme prévu. Après que j'appuie sur le bouton "Semaine" affiche toujours la "Semaine" dans le TextView, même si je clique sur le bouton "Mois" montre toujours la vue de la semaine.Comment changer une valeur pour une activité après avoir appuyé sur un bouton dans android?

débogage dit que quand je presse « Mois », « Mois » = « true », alors onCreate la valeur est toujours « vrai », mais dans la 1ère instruction If

if (extras != null){   // <-------here is still true 
    month = extras.getString(month); // <-------here is false 
} 

que des valeurs est tout à coup "faux"

Je sais que je pourrais mettre en settext dans les boutons, mais plus tard j'ajouterai des graphiques pour afficher des données, ainsi je voudrais être fait surCréer. Chaque fois qu'il crée la vue, il vérifie quelle vue est sélectionnée (en comparant la chaîne) et affiche le message et les graphiques. la première fois pour afficher la vue Mois.

Qu'est-ce que je fais de mal?

Heres le code

package com.isma.report; 



import android.app.Activity; 
import android.content.Intent; 
import android.os.Bundle; 
import android.view.View; 
import android.widget.Button; 
import android.widget.TextView; 

public class report1 extends Activity{ 


    TextView viewtime; 
    String month = "true"; 
    Intent starterIntent; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     // TODO Auto-generated method stub 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.report); 

     starterIntent = getIntent(); 


     Bundle extras = getIntent().getExtras(); 
     if (extras != null) { 
      month = extras.getString("month"); 

     } 

     // Set the text 
     viewtime = (TextView) findViewById(R.id.StudentReportText); 
     if (month.equals("true")){ 
      viewtime.setText("Monthly View"); 
     } 

     if{month.equals("false")){ 
      viewtime.setText("Weekly View"); 
     } 


     //Month View Button 
     Button bMonth = (Button) findViewById(R.id.monthincome); 
     bMonth.setOnClickListener(new View.OnClickListener() { 

      @Override 
      public void onClick(View v) { 
       // TODO Auto-generated method stub 


       starterIntent.putExtra(month, "true"); 
       startActivity(starterIntent); 
       finish(); 
      } 
     }); 

     //Week View Button 
     Button bWeek = (Button) findViewById(R.id.weekincome); 
     bWeek.setOnClickListener(new View.OnClickListener() { 

      @Override 
      public void onClick(View v) { 
       // TODO Auto-generated method stub 
       starterIntent.putExtra(month, "false"); 
       startActivity(starterIntent); 
       finish(); 

      } 
     }); 
    } 
} 
+0

Pouvez-vous confirmer les ID (de monthincome et monthincome) sont des boutons – Siva

+0

ils sont monthincome et weekincome android: id = "@ + id/monthincome" android: id = "@ + id/weekincome " – Isma

+0

certains où votre objet d'accès est null le déboguer et trouver où vous obtenez l'objet nul. – Siva

Répondre

0

Enfin, j'ai réussi à le réparer!

Tout d'abord merci à tous m'a aidé.

Maintenant, la correction est très simple.

J'ai déplacé l'initialisation du mois String à l'intérieur de la méthode onCreate sans valeur. J'ai également étendu l'instruction if pour affecter la valeur true si le premier temps était en cours ou si je n'appuyais sur aucun bouton.

String month = ""; 

Bundle extras = getIntent().getExtras(); 
if (extras != null) { 
    month = extras.getString(month); 

    } 
    else{ 
     month = "true"; 
    } 

J'ai aussi initialisés avec aucune valeur de la variable mois dans les méthodes onClick

String month = ""; 

très simple mais il m'a fallu 2 jours pour comprendre! ; P merci encore les gars

2
if (month == "true") 

Vous ne pouvez pas comparer les chaînes en Java en utilisant ==. Utilisez equals(...) - exemple ...

if (month.equals("true")) 
+0

il se bloque comme cela dans cette ligne: if (month.equals ("true")) – Isma

+0

pourquoi il obtient alors la fausse valeur? si je initialise avec vrai? son passage la fausse valeur quand appuyez sur un bouton droit? – Isma

+0

Le point est 'if (month ==" true ")' n'évaluera jamais un résultat vrai et vous avez un bloc 'else' qui sera toujours exécuté. Si ça plante en utilisant 'equals (...)' alors vous avez un autre problème dans votre code - dans ce cas, éditez votre question et publiez votre logcat. – Squonk

Questions connexes