2017-02-08 2 views
1

Привет, я новичок в android & java, я пытался сделать меню с тремя кнопками каждый раз, когда нажимается кнопка, остальные две меняют цвет или щелкают один, подсвечивается, чтобы показать, что он выбран. Но я не могу вызвать метод изнутри onCreate для выполнения конкретной задачи при нажатии. Помощь Благодаря `Как вызвать метод в том же классе изнутри 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. Ваш код не будет компилироваться. 2. Где вы определяете кнопки1, button2 и button3. Даже если код будет скомпилирован, вы получите исключение NullPointerException, потому что ваши кнопки не определены в вашем коде – Kuffs

ответ

1

Вы не можете определить методы в методов:

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

не работает! Перейдите для:

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

вместо этого.

Кроме того, другая основная вещь, чтобы понять, что для того, чтобы иметь несколько методов работу на один и тот же переменном, те должны быть полями вашего класса, как:

public class Example { 
    private Button button1 

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

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

над комментарием «Методы», он закрывает метод. –

+0

Я все еще не понимаю, что это PLZ объяснить? – Misterrai

+0

@Misterrai Я обновил свой ответ, а также внимательно прочитал другой ответ. – GhostCat

0

старого ответ

Ваша задача о button's initializations:

Вы звоните MyMethod(mybutton1, mybutton2, mybutton3);

, но вы никогда не инициализируете свой buttons, поэтому они всегда будут null.

То же самое касается TextView.

В Android вы должны вызвать инициализации, как показано ниже:

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, они являются лучшими для андроид начинающих имхо.

Удачи вам! за любую помощь я здесь

Улучшения:

Это как ваш код должен выглядит.Не забудьте отформатировать код для лучшего понимания:

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

Были некоторые моменты:

  • Один дополнительный закрывающая скобка в конце
  • (конвенция) не называют переменную с капиталом Лектера
  • Я не изменял имена ваших методов и имена переменных, но подумайте об использовании чего-то более объяснительного (все еще соглашение, но для лучшего понимания)
  • У вас не было е ; после вызова метода обновит

Улучшения'S:

Вы отсутствовали в ; после того, как mClick(..) вызовов.

+0

Извините, я не добавил полный код раньше, отредактировал его снова. У меня уже были все кнопки и объекты TextView, определенные, но он не работает. Пожалуйста, смотрите снова. – Misterrai

+0

@ Мистеррай проверяет отредактированный код и запускает его. Если он дает вам какие-либо ошибки, отправьте его –

+0

Спасибо за советы, которые я буду помнить. – Misterrai

0

Из моего понимания того, что вы хотите, вы можете использовать этот

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; 
    } 
} 

Если нет, пожалуйста, комментарий точных потребностей, так что я мог бы помочь

+0

Спасибо за вашу помощь, но я думаю, что это может не сработать, поскольку это действительно, если я нажму кнопку button1, но не буду работать для других кнопок (button2 и button3). Основная идея использования параметров состояла в том, чтобы изменить значение button1 evrytime. благодаря – Misterrai

Смежные вопросы