2015-08-08 4 views
1

Я пытаюсь сделать приложение калькулятора, которое отображает все, что пользователь нажимает на текстовый экран редактирования, однако, когда пользователь нажимает кнопку, экран редактирования текста по-прежнему остается пустым. Я поставил некоторые заявления для печати, чтобы узнать, что происходит, и это то, что я выяснил:Как отображать значения при редактировании текста, когда пользователь нажимает кнопку?

Заявление о печати в updateEditText() всегда пустое, даже если пользователь нажимает кнопку, но оператор печати в getValuesPressed() успешно распечатывает, где нажали кнопки.

Я не понимаю, что я делаю неправильно.

Вот что у меня есть:

void updateEditText(){ 
    EditText et = (EditText) findViewById(R.id.editText); 
    System.out.println("THE VALUE PRESSED IS: " + getValuesPressed()); 
    et.setText(getValuesPressed());//problem here 
} 

//return and concat the buttons that were clicked 
String getValuesPressed(){ 

    for(int i = 0; i < buttonList.length; i++){ 

     final int j = i; 
     buttonList[i].setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 

       System.out.println("THE BUTTON WAS PRESSED: " + buttonList[j].getText()); 
       switch(j){ 

        case 0://CLEAR 
         textOnScreen = "0"; 
         break; 

        case 5://SQRT 
         solveEquation(); 
         //CASE: IF IT IS NEG U CANT TAKE THE SQRT!!!! 
         textOnScreen = String.valueOf(Math.sqrt(Double.parseDouble(textOnScreen))); 
         break; 

        case 18: //NEGATIVE 
         if(textOnScreen.charAt(textOnScreen.length() - 1) != '-') 
          textOnScreen = textOnScreen + "-"; 
         else 
          textOnScreen = textOnScreen.substring(0, textOnScreen.length() - 1); 
         break; 

        case 19: //BACKSPACE 
         if(textOnScreen.length() == 1) 
          textOnScreen = "0"; 
         else 
          textOnScreen = textOnScreen.substring(0, textOnScreen.length() - 1); 
         break; 

        case 20: //SOLVE 
         solveEquation(); 
         break; 

        default://concat all of the other buttons pressed 
         textOnScreen = textOnScreen + buttonList[j].getText(); 
         break; 
       } 
      } 
     }); 
    } 
    return textOnScreen; 
} 
+0

getValuesPressed() - это целая строка? – Destro

+0

@Destro возвращает строку –

+0

Вы пытались сделать некоторые точки останова, чтобы увидеть, где он работает? Я имею в виду внутри функции getValuesPressed() –

ответ

2

Вы не должны установить OnClickListener более чем один раз для каждой кнопки. Измените функцию getValuesPressed() в строке, чтобы аннулировать setButtonClickEvents().

Кроме того, вам не нужна функция updateEditText(). Вместо конкатенации textOnScreen, сцепить EditText непосредственно:

case 0://CLEAR 
    et.setText("0"); 
    break; 

case 5://SQRT 
    solveEquation(); 
    //CASE: IF IT IS NEG U CANT TAKE THE SQRT!!!! 
    et.setText(String.valueOf(Math.sqrt(Double.parseDouble(et.getText().toString()))); 
    break; 

и так далее.

1

Весь ваш код для меня не имеет смысла. Первое, что вам нужно сделать, - добавить onClickListener ко всем вашим кнопкам. Этот слушатель мог выглядеть примерно так:

@Override 
     public void onClick(View v) { 

      System.out.println("THE BUTTON WAS PRESSED: " + ((Button)v).getText(); 
      switch(v.getId()){ 

       case R.id.<ID of this Button>://CLEAR 
        et.setText("0"); 
        break; 

       case R.id.<ID of this Button>://SQRT 
        solveEquation(); 
        //CASE: IF IT IS NEG U CANT TAKE THE SQRT!!!! 
        et.setText(String.valueOf(Math.sqrt(Double.parseDouble(textOnScreen)))); 
        break; 

       case R.id.<ID of this Button>: //NEGATIVE 
        if(et.getText().charAt(et.getText().length() - 1) != '-') 
         et.setText(et.getText + "-"); 
        else 
         et.setText(et.getText().toString().substring(0, et.getText().length() - 1)); 
        break; 

       case R.id.<ID of this Button>: //BACKSPACE 
        if(et.getText().length() == 1) 
         et.setText("0"); 
        else 
         et.setText(et.getText().toString()substring(0, et.getText().length() - 1)); 
        break; 

       case R.id.<ID of this Button>: //SOLVE 
        solveEquation(); 
        break; 
      } 
     } 
Смежные вопросы