public interface Callback {
void execute(Button button);
}
protected void addClickListener(final Button button, final Callback callback) {
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
callback.execute(button);
}
});
}
protected Callback numberActions(Button button) {
String value = button.getText().toString();
setDisplay(value);
}
protected void setDisplay (String value) {
String newValue;
displayValue = resultDisplay.getText().toString();
if (displayValue.length() < 10){
newValue = resultDisplay.getText() + value;
resultDisplay.setText(newValue);
displayValue = newValue;
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button numberButtons[] = new Button[11];
numberButtons[0] = (Button) findViewById(R.id.numberOne);
numberButtons[1] = (Button) findViewById(R.id.numberTwo);
numberButtons[2] = (Button) findViewById(R.id.numberTwo);
numberButtons[3] = (Button) findViewById(R.id.numberThree);
numberButtons[4] = (Button) findViewById(R.id.numberFour);
numberButtons[5] = (Button) findViewById(R.id.numberFive);
numberButtons[6] = (Button) findViewById(R.id.numberSix);
numberButtons[7] = (Button) findViewById(R.id.numberSeven);
numberButtons[8] = (Button) findViewById(R.id.numberEight);
numberButtons[9] = (Button) findViewById(R.id.numberNine);
numberButtons[10] = (Button) findViewById(R.id.numberZero);
resultDisplay = (TextView) findViewById(R.id.resultDisplay);
for (Button button: numberButtons) {
addClickListener(button, numberActions(button));
}
}
Я строю простой калькулятор на Android Studio с Java.
Вместо вызова setOnClickListener для каждого экземпляра кнопки, я создал addClickListiner для его абстрагирования. Так, например, я создаю массив кнопок с цифрами, и с помощью функции onClick
я определяю, что они должны изменить отображение ввода как действие. Моя цель - использовать addClickListener для каждой кнопки, затем я могу передать действие в качестве второго параметра (обратного вызова), который определит, какое действие будет выполнять эта кнопка.
На самом деле я javascript разработчик, и это было бы так же просто, как просто передать функцию в качестве параметра. Поскольку я изучаю Java, я не знаю, как это выполнить ... Моя цель - передать функцию void в качестве параметра для ее выполнения при каждом нажатии кнопки.
Я пытался создать интерфейс publi c ... Но когда я пытаюсь его построить, он ломается, говоря, что у меня должен быть оператор return для метода numberActions. Может кто-нибудь помочь мне с тем, как передать функцию обратного вызова в качестве параметров в этом случае?