我试图通过提高效率来减少代码量
我想实现一个switch语句而不是long if语句 这是我开始创建的开关
public void onClick(View v) {
switch(v.getId()){
case R.id.buttonA:
displayLetters(v);
break;
case R.id.buttonB:
displayLetters(v);
break;
这是我想要每个案例运行的displayLetters方法
private void displayLetters(View v) {
NewDisplayWord = EditText.getText().toString();
NewDisplayWord = NewDisplayWord + v.getTag();
EditText.setText(NewDisplayWord);
}
然而,当我按下按钮时,不是在textedit中显示A或B,而是当按下任何按钮时,我得到null
答案 0 :(得分:2)
您似乎正在尝试通过EditText
从EditText.getText()
获取文字。我认为您的意思是使用传递给v
的{{1}}变量。你可以这样做:
displayLetters()
如果private void displayLetters(View v) {
NewDisplayWord = ((EditText)v).getText().toString();
NewDisplayWord = NewDisplayWord + v.getTag();// I do not know what is the use of `getTag()` here...
((EditText)v).setText(NewDisplayWord);
}
仅处理displayLetters()
,您可以将其参数设为EditText
答案 1 :(得分:1)
首先,让我们将displayLetters更改为接受String
private void displayLetters(final String letter) {
newDisplayWord = editText.getText().toString();
newDisplayWord = newDisplayWord + letter;
editText.setText(newDisplayWord);
}
然后使用String param调用displayLetters():
public void onClick(View v) {
switch(v.getId()){
case R.id.buttonA:
displayLetters(v.getTag());
break;
case R.id.buttonB:
displayLetters(v.getTag());
break;
default:
break;
}
}
如果你的onClick()监听器只提供按钮,你可以进一步简化它:
@Override
public void onClick(View v) {
//cast view to button
Button bt = (Button) v;
//get text from button
final String letter = bt.getText().toString();
//pass it to displayLetters()
displayLetters(letter);
}
请遵循Java命名约定,即变量名以小写开头。另外,我假设您已正确设置按钮并编辑文本:
editText = (EditText) findViewById(R.id.editText);
button = (Button) findViewById(R.id.button);
button.setOnClickListener(this);