2017-02-08 1 views
1

Salut je suis nouveau à android & java, j'essayais de faire un menu trois boutons chaque fois qu'un bouton est cliqué autre deux change sa couleur ou cliqué sur un est mis en évidence pour montrer qu'il est sélectionné Mais je suis incapable d'appeler une méthode de l'intérieur onCréer pour effectuer une tâche particulière lorsqu'on clique dessus. Aide `MerciComment appeler une méthode dans la même classe à l'intérieur de la méthode oncreate android?

public class MainActivity extends AppCompatActivity { 

    int PriceList; 
    @Override 
    public void onCreate(Bundle savedInstanceState){ 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     Button button1 = (Button)findViewById(R.id.Coffee); 
     Button button2 = (Button)findViewById(R.id.Mocha); 
     Button button3 = (Button)findViewById(R.id.Lattee); 
     TextView Counter = (TextView)findViewById(R.id.Counters); 

      mClick(button1,button2,button3) 
      mClick(button2,button1,button3) 
      mClick(button3,button2,button1) 

      Counter.setText(Item()); //Counter is a TextVew, This code doesn't work 

       } 

      **/*------------METHODS----------------*/** 

    public int TotalValue(int param5){ 

       if(param5 == 2131427416){ //just Trying to compare with id value 

       Item(); 

       Log.d("Item Value " , "onCreate: The value is " + Item()); // works upto here i.e Item()=1 

       } else{ 
        // some other code here 
       } 
      } 

    public int Item(){ 

      PriceList = 1; 

      return PriceList; 
     }    

     public void mClick(final Button param1,final Button param2,final Button param3){ 
      param1.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view){ 
       param2.setBackgroundColor(Color.rgb(192,110,99)); 
       param3.setBackgroundColor(Color.rgb(192,110,99)); 

       int IdNum = param1.getId() 

       TotalValue(IdNum); 

       } 
    }); 
    } 
    } 
} 
+0

1. Votre code ne compilerait pas. 2. Où définissez-vous button1, button2 et button3. Même si le code compile, vous obtiendrez une exception NullPointerException car vos boutons ne sont pas définis dans votre code – Kuffs

Répondre

1

Vous ne pouvez pas définir des méthodes au sein méthodes:

public class Example { 
    void foo() { 
    void bar() { } 
    } 

ne fonctionne pas! Optez pour:

public class Example { 
    void foo() { 
    } 
    void bar() { } 

à la place.

Au-delà, l'autre élément de base à comprendre est que pour avoir de multiples méthodes de travail sur les mêmes variables, celles doivent être champs de votre classe, comme:

public class Example { 
    private Button button1 

    void onCreate() { 
    ... 
    button1 = (Button) findViewById(R.id.button1); 
    ... 
    } 

    void foo() {   
    do something with button1 
    } 
+0

au dessus du commentaire "Méthodes", il ferme la méthode .. –

+0

Je ne comprends toujours pas plz expliquer? – Misterrai

+0

@Misterrai J'ai mis à jour ma réponse et j'ai lu l'autre réponse avec beaucoup d'attention. – GhostCat

0

ancienne réponse

Votre problème est sur le point button's initializations:

Vous appelez MyMethod(mybutton1, mybutton2, mybutton3);

mais vous n'initialisez jamais votre buttons alors ils seront toujours null.

Il en va de même pour TextView.

Dans Android, vous devez appeler init comme ci-dessous:

public void onCreate(...){ 

    Button button1 = (Button)findViewById(R.id.Coffee); 
    Button button2 = (Button)findViewById(R.id.Mocha); 
    Button button3 = (Button)findViewById(R.id.Lattee); 
    TextView Counter = (TextView) findViewById(R.id.Counters); 

    mClick(button1,button2,button3); 
    mClick(button2,button1,button3); 
    mClick(button3,button2,button1); 

    Counter.setText(Item()); //Counter is a TextVew, This code doesn't work 

} 

Check for those videos on youtube, ils sont les meilleurs pour les débutants android IMHO.

Bonne chance! pour toute aide que je suis ici

Améliorations:

Voici comment votre code devrait ressembler.Rappelez-vous de formater le code pour une meilleure compréhension:

public class MainActivity extends AppCompatActivity { 

    private int priceList; 

    @Override 
    public void onCreate(Bundle savedInstanceState){ 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    Button button1 = (Button)findViewById(R.id.button1); 
    Button button2 = (Button)findViewById(R.id.button2); 
    Button button3 = (Button)findViewById(R.id.button3); 
    TextView counter = (TextView)findViewById(R.id.Counter); 

    mClick(button1,button2,button3) 
    mClick(button2,button1,button3) 
    mClick(button3,button2,button1) 

    counter.setText(Item()); //Dont' use capital letters for variable's name 
    } 

      **/*------------METHODS----------------*/** 

    public int TotalValue(int param5){ 

    if(param5 == 2131427416){ //just Trying to compare with id value 
     Item(); 
     Log.d("Item Value " , "onCreate: The value is " + Item()); // works upto here i.e Item()=1 

    } else{ 
     // some other code here 
    } 
    } 

    public int Item(){ 
    priceList = 1; 
    return priceList; 
    }    

    public void mClick(final Button param1,final Button param2,final Button param3){ 
    param1.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view){ 
     param2.setBackgroundColor(Color.rgb(192,110,99)); 
     param3.setBackgroundColor(Color.rgb(192,110,99)); 
     int idNum = param1.getId() 
     TotalValue(idNum); 
     } 
    }); 
    } 
} 

Il y avait quelques points:

  • Une accolade fermante supplémentaire à la fin
  • (convention) ne pas appeler une variable Lecter du capital
  • Je n'ai pas changé les noms de vos méthodes et de vos variables, mais pensez à utiliser quelque chose de plus explicatif (encore une convention, mais pour une meilleure compréhension)
  • Vous n'avez pas eu e ; après la méthode de l'appel

de mise à jour de l'amélioration:

Vous avez été absent du ; après les appels mClick(..).

+0

Désolé je n'ai pas ajouté le code complet plus tôt, édité à nouveau J'ai déjà eu tous les boutons et les objets TextView définis encore ça ne fonctionne pas s'il vous plaît jeter un oeil à nouveau – Misterrai

+0

@Misterrai vérifier le code édité et essayez de l'exécuter. Si cela vous donne une erreur s'il vous plaît poster –

+0

Merci pour les conseils que je les garderai à l'esprit. – Misterrai

0

Si je comprends bien ce que vous voulez, vous pouvez utiliser cette

public class LoginActivity extends AppCompatActivity { 

    int PriceList; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     final Button button1 = (Button) findViewById(R.id.Coffee); 
     final Button button2 = (Button) findViewById(R.id.Mocha); 
     final Button button3 = (Button) findViewById(R.id.Lattee); 
     TextView Counter = (TextView) findViewById(R.id.Counters); 
     button1.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       button2.setBackgroundColor(Color.rgb(192, 110, 99)); 
       button3.setBackgroundColor(Color.rgb(192, 110, 99)); 
       int IdNum = button1.getId(); 
       TotalValue(IdNum); 

      } 
     }); 
     Counter.setText(Item()); //Counter is a TextVew, This code doesn't work 
    } 

    public int TotalValue(int param5) { 
     if (param5 == 2131427416) { //just Trying to compare with id value 
      Item(); 
      Log.d("Item Value ", "onCreate: The value is " + Item()); // works upto here i.e Item()=1 
     } else { 
      // some other code here 
     } 
     return 0; 
    } 

    public int Item() { 
     PriceList = 1; 
     return PriceList; 
    } 
} 

Sinon s'il vous plaît commenter le besoin exact que je puisse aider

+0

Merci pour votre aide, mais je pense que cela pourrait ne pas fonctionner car cela est valide si je clique sur le bouton 1 mais ne fonctionnera pas pour les autres boutons (bouton2 et bouton3). L'idée principale derrière l'utilisation des paramètres était de changer la valeur de button1 evrytime. Merci – Misterrai