#java #android #textview #calculator
#java #Android #просмотр текста #калькулятор
Вопрос:
Я новичок в разработке приложений для Android, и я работаю над простым калькулятором.
The MainActivity.java файл выглядит следующим образом-
public class MainActivity extends Activity implements OnClickListener
{
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
View add = (Button)findViewById(R.id.Add);
add.setOnClickListener(this);
View substract = (Button)findViewById(R.id.Substract);
substract.setOnClickListener(this);
View multiply = (Button)findViewById(R.id.Multiply);
multiply.setOnClickListener(this);
View divide = (Button)findViewById(R.id.Divide);
divide.setOnClickListener(this);
View equals = (Button)findViewById(R.id.Equals);
equals.setOnClickListener(this);
//Numbers
View nu1 = (Button)findViewById(R.id.n1);
nu1.setOnClickListener(this);
View nu2 = (Button)findViewById(R.id.n2);
nu2.setOnClickListener(this);
View nu3 = (Button)findViewById(R.id.n3);
nu3.setOnClickListener(this);
View nu4 = (Button)findViewById(R.id.n4);
nu4.setOnClickListener(this);
View nu5 = (Button)findViewById(R.id.n5);
nu5.setOnClickListener(this);
View nu6 = (Button)findViewById(R.id.n6);
nu6.setOnClickListener(this);
View nu7 = (Button)findViewById(R.id.n7);
nu7.setOnClickListener(this);
View nu8 = (Button)findViewById(R.id.n8);
nu8.setOnClickListener(this);
View nu9 = (Button)findViewById(R.id.n9);
nu9.setOnClickListener(this);
View nu0 = (Button)findViewById(R.id.n0);
nu0.setOnClickListener(this);
View ac = (Button)findViewById(R.id.AC);
ac.setOnClickListener(this);
View ce = (Button)findViewById(R.id.CE);
ce.setOnClickListener(this);
View del = (Button)findViewById(R.id.DEL);
del.setOnClickListener(this);
View pnt = (Button)findViewById(R.id.np);
pnt.setOnClickListener(this);
}
@Override
public void onClick(View v)
{
float num1=0,numx=0;
int choice=0;
TextView num = (TextView)findViewById(R.id.Number);
num.setOnClickListener(this);
switch (v.getId())
{
case R.id.Add:
choice=1;
numx=num1;
num1=0;
num.setText("");
break;
case R.id.Substract:
choice=2;
numx=num1;
num1=0;
num.setText("");
break;
case R.id.Multiply:
choice=3;
numx=num1;
num1=0;
num.setText("");
break;
case R.id.Divide:
choice=4;
numx=num1;
num1=0;
num.setText("");
break;
case R.id.Equals:
switch(choice)
{
case 1:
num1=numx num1;
num.setText("" num1);
choice=0;
break;
case 2:
num1=num1-numx;
num.setText("" num1);
choice=0;
break;
case 3:
num1=num1*numx;
num.setText("" num1);
choice=0;
break;
case 4:
num1=num1/numx;
num.setText("" num1);
choice=0;
break;
case 0:
num.setText("" num1);
choice=0;
break;
}
case R.id.n1:
num1=num1*10 1;
num.setText("" num1);
System.out.print(num1);
break;
case R.id.n2:
num1=num1*10 2;
num.setText("" num1);
break;
case R.id.n3:
num1=num1*10 3;
num.setText("" num1);
break;
case R.id.n4:
num1=num1*10 4;
num.setText("" num1);
break;
case R.id.n5:
num1=num1*10 5;
num.setText("" num1);
break;
case R.id.n6:
num1=num1*10 6;
num.setText("" num1);
break;
case R.id.n7:
num1=num1*10 7;
num.setText("" num1);
break;
case R.id.n8:
num1=num1*10 8;
num.setText("" num1);
break;
case R.id.n9:
num1=num1*10 9;
num.setText("" num1);
break;
case R.id.n0:
num1=num1*10;
num.setText("" num1);
break;
}
}
}
Я сталкиваюсь с 2 проблемами-
- Если я хочу ввести любое число, превышающее одну цифру, этого не произойдет. Например, если я нажму 53, сначала текстовое представление покажет 5.0, затем 3.0
- Во-вторых, все вычисления всегда дают результат 1.0 после нажатия кнопки =
Может кто-нибудь, помогите мне!
Комментарии:
1. не могли бы вы опубликовать XML-код?
Ответ №1:
Почему вы устанавливаете прослушиватель щелчков на num?
Вы определяете выбор, нажимаете числа в onClick
методе и повторно инициализируете их каждый раз, когда нажимаете одну из кнопок. Они должны быть частью полей активности
Комментарии:
1. Итак, это нельзя сделать, реализовав OnClickListener? Я должен вызывать OnClick() для каждой кнопки в методе onCreate?
2. Это можно сделать. Я просто не понимаю, почему вы устанавливаете этот прослушиватель щелчков «num.setOnClickListener (this);». И я указал, что ваши переменные инициализируются каждый раз, когда вы нажимаете btn. например, когда вы нажимаете на равно, выбор будет равен 0
3. Я удалил число. OnClickListener(), это была ошибка. Я понимаю, что вы говорите. Я просто подумал, что использование переключателя в onClick() кажется лучше, чем вызов onClick() для каждой кнопки. Могу ли я в любом случае реализовать onClickLitener, и значения не инициализируются каждый раз? Статический спецификатор или что-то в этом роде?
4. Что он имел в виду под 2-м абзацем, так это переместить эти локальные переменные за пределы метода: поместить
float num1=0,numx=0;int choice=0;
над@Override protected void onCreate()
. Смотрите этот учебник для получения дополнительной информации.5. Понял …. совершенно глупая ошибка. Я все время забываю, что свойства кодирования Android такие же, как у Java и C ! Большое вам спасибо!
Ответ №2:
Вы должны получить текст для вашего номера textview в случаях переключения (add, sub).Нравится num.getText().toString().
Комментарии:
1. Зачем это нужно? Число сохраняется в num1, и при нажатии кнопки add или любого другого операнда num1 копируется в num x, а num 1 устанавливается равным 0. Итак, в следующий раз при нажатии цифры второе число вводится в num1. И нажатие = добавляет num1 и numx.
2. Число хранится в num1… вы говорите, что число, которое вы вводите в свой textview, хранится в num1 … верно ?? но где этот код??
3. @kgandroid OP прав. Отображается
TextView
только число, пока эти числа хранятся внутри 2float
переменных. В этом случае нет необходимости использоватьnum.getText().toString()
.