2016-01-14 2 views
0

Это MainActivity моего приложения-калькулятора, в котором я пытаюсь сначала добавить setText(), а затем присоединить к TextView main.Как добавить текст в TextView после setText()?

Моя проблема заключается в том, что append() действительно работает, но он добавляется только один раз после вызова метода setText(). Я хочу, чтобы он добавлял текст несколько раз.

Как это сделать?

public class MainActivity extends Activity implements OnClickListener { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.calculator_screen); 

     TextView main = (TextView) findViewById(R.id.maintextView); 
     main.setText("0."); 

     Button btnSeven = (Button) findViewById(R.id.btnseven); 
     btnSeven.setOnClickListener(this); 
    } 

    @Override 
    public void onClick(View view) { 
     switch(view.getId()) { 
      case R.id.btnseven: 
       TextView main = (TextView) findViewById(R.id.maintextView); 
       main.setText(""); 
       main.append("7"); 
       break; 
      default : 
       break; 
     } 
    } 
} 
+1

Вы просто хотите добавить «7» на существующий текст при нажатии на кнопку, или ** только ** есть «7», когда вы нажимаете кнопку? –

+0

setText (""); затем добавьте 7, как это происходит в реальном калькуляторе –

+1

Но вызов 'setText (" ")' очистит текстовое поле. Если вы просто 'append (" 7 ")', он добавит «7» в текстовое поле –

ответ

1

Проблема заключается в том, что вы сбрасываете текст на TextView, выполнив:

main.setText(""); 

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

public class MainActivity extends Activity implements OnClickListener { 

    private TextView mMain; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.calculator_screen); 

     mMain = (TextView) findViewById(R.id.maintextView); 
     mMain.setText("0"); 

     Button btnSeven = (Button) findViewById(R.id.btnseven); 
     btnSeven.setOnClickListener(this); 
    } 

    @Override 
    public void onClick(View view) { 
     String mainText = mMain.getText().toString(); 
     try { 
      // By parsing the text as a number, you make sure you handle the cases where the user added input like "0." too, so you don't have to handle each and every case with Strings and with if-else statements. 
      double actualNumber = Double.parseDouble(mainText); 
      if (actualNumber == 0) { 
       mMain.setText(""); 
      } 
     } catch (NumberFormatException e) { 
      e.printStackTrace(); 
      // Something went wrong while parsing. Usually happens because the EditText contains other characters the digits or "." 
     } 

     switch(view.getId()) { 
      case R.id.btnseven: 
       mMain.append("7"); 
       break; 
      default : 
       break; 
     } 
    } 
} 
+0

в реальном калькуляторе, она показывает 0 раньше, поэтому я пытался реализовать это. На самом деле append просто добавляет ее после 0. –

+1

Я отредактировал свой ответ, чтобы соответствовать этим потребностям , – Mike

+1

О! не думал, что если состояние спасибо! –

0

Есть 2 ошибки в отношении выпуска:

  1. повторной инициализации main каждый раз, когда кнопка нажата, то есть переменная main относится к новый TextView экземпляра каждый раз:

    case R.id.btnseven: 
        TextView main = (TextView) findViewById(R.id.maintextView); 
    
  2. вы называете setText() каждый раз, когда кнопка нажата, это означает, что предыдущий заданный текст заменяется на новый:

    main.setText ("");

Просто добавьте текст по клику:

case R.id.btnseven: 
     main.append("7"); 
     break; 
Смежные вопросы