Хорошо, ребята, это довольно простой вопрос, но это то, о чем я не совсем уверен. В приведенном ниже примере я построил простой калькулятор с двумя редакторами (для ввода номера) и двумя кнопками (добавление и вычитание). В настоящий момент мне нужно объявить все переменные/компоненты (например, кнопки, edittexts и т. Д.) В методах btnAdd и btnSub OnClick. Я имею в виду, что это только очень простая программа, но для повторного объявления всех этих переменных/компонентов (или как вы их называете?), Очевидно, будет действительно утомительно. Вы можете увидеть код, который у меня есть:Java: как объявить эти переменные как «глобальные»/общедоступные?
Button btnAdd = (Button)findViewById(R.id.btnAdd);
Button btnSub = (Button)findViewById(R.id.btnSub);
btnAdd.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
TextView textViewAns = (TextView)findViewById(R.id.TextViewAns);//here
EditText editText1 = (EditText)findViewById(R.id.editText1);//...
EditText editText2 = (EditText)findViewById(R.id.editText2);//...
int num1 = Integer.parseInt(editText1.getText().toString());//...
int num2 = Integer.parseInt(editText2.getText().toString());//...to here
int total = num1 + num2;
textViewAns.setText(Integer.toString(total));
}
});
btnSub.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
TextView textViewAns = (TextView)findViewById(R.id.TextViewAns);
EditText editText1 = (EditText)findViewById(R.id.editText1);
EditText editText2 = (EditText)findViewById(R.id.editText2);
int num1 = Integer.parseInt(editText1.getText().toString());
int num2 = Integer.parseInt(editText2.getText().toString());
int total = num1 - num2;
textViewAns.setText(Integer.toString(total));
}
});
Итак, вы можете увидеть все дублирование. То, что я пытаюсь достичь, - это что-то вроде того, что я публикую ниже, хотя все равно я могу это сделать?
Button btnAdd = (Button)findViewById(R.id.btnAdd);
Button btnSub = (Button)findViewById(R.id.btnSub);
final TextView textViewAns = (TextView)findViewById(R.id.TextViewAns);
EditText editText1 = (EditText)findViewById(R.id.editText1);
EditText editText2 = (EditText)findViewById(R.id.editText2);
final int num1 = Integer.parseInt(editText1.getText().toString());
final int num2 = Integer.parseInt(editText2.getText().toString());
btnAdd.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
int total = num1 + num2;
textViewAns.setText(Integer.toString(total));
}
});
btnSub.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
int total = num1 - num2;
textViewAns.setText(Integer.toString(total));
}
});
На данный момент, я получаю сообщение об ошибке в затмении, говоря «не может относиться к неконечному переменному внутри внутреннего класса, определенный в другом методе», поэтому я добавил «окончательное» ключевое слово перед переменные, за которые я получал ошибку. Проблема в том, что всякий раз, когда я пытаюсь запустить программу, она просто зависает, как только она загружается. Я надеюсь, это будет быстро исправить, хотя кто знает. Во всяком случае, спасибо заранее за любые ответы :)
Почему бы не использовать обычный класс (вместо анонимного)? –
Ваш второй код идеален - зачем вам нужно какое-либо ключевое слово вместе с ним? –
@NinadPingale. Дело в том, что, как только я пытаюсь запустить второй код, я просто получаю это сообщение, говоря: «Невозможно запустить [название приложения Android]», ... – Sam