【问题标题】:Using a switch statement onClick to add a character to a EditText使用 switch 语句 onClick 将字符添加到 EditText
【发布时间】:2014-01-01 22:03:00
【问题描述】:

我试图通过提高一切效率来减少我的代码量

我想实现一个 switch 语句而不是一个长的 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

【问题讨论】:

  • "I get null" 意思是……v.getId() 行是空的?
  • 它肯定有它的价值,它与 if 语句一起工作 100%
  • 你的代码的哪一行给你null?你能发布一个堆栈跟踪吗?
  • 我不确定堆栈跟踪是什么,但是当我按下按钮时...文本编辑中显示 Null,而不是按钮上写的文本?

标签: java android onclick switch-statement


【解决方案1】:

您似乎正试图通过执行EditText.getText()EditText 获取文本。我认为您的意思是使用传递给displayLetters()v 变量。你可以这样做:

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()只处理EditTexts,你可以把它的参数设为EditText

【讨论】:

  • 我正在尝试获取 editText 内容,然后添加已按到 editText 末尾的新字母。我确定 getTag 不正确,但我相信您不能使用 getText,因为它不能在类型视图中使用
  • 这就是为什么我将v 转换为具有getText()EditText
  • 这样我收到错误消息“EditText 无法解析为类型”
  • 如果没有导入类,需要导入。如果您使用 Eclipse,请按 Ctrl+Shift+O 来组织您的导入。
  • 无法从 View 转换为 EditText 并且方法 getText() 未定义为 EditText 类型
【解决方案2】:

首先,让我们将 displayLetters 改为接受字符串

private void displayLetters(final String letter) {
    newDisplayWord = editText.getText().toString();
    newDisplayWord = newDisplayWord + letter;

    editText.setText(newDisplayWord);
}

然后使用 String 参数调用 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 = (EditText) findViewById(R.id.editText);

    button = (Button) findViewById(R.id.button);
    button.setOnClickListener(this);

【讨论】:

  • 非常感谢您的帮助,终于有人懂了。不幸的是,我遇到了同样的问题,我关注的是按钮的文本而不是标签?
  • 没问题。请参阅最后一个 onClick() 侦听器中的修改。类似的逻辑也可以用switch语句实现。
猜你喜欢
  • 1970-01-01
  • 2023-03-18
  • 1970-01-01
  • 2018-07-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-15
相关资源
最近更新 更多