【问题标题】:Non-final variable on a click listener点击监听器上的非最终变量
【发布时间】:2014-02-21 02:01:06
【问题描述】:

我正在制作一个安卓应用程序。我有一个 TextField 和一个按钮。根据文本字段的值,只要用户单击按钮,我就想做点什么。我有代码:

EditText et = (EditText)findViewById(R.id.editText1);
String value = et.getText().toString();
ImageButton ib = (ImageButton)findViewById(R.id.imageButton1);
ib.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            if (value = "a" ) {
            //do something }
            }
        });

然而,这不会编译,说“不能引用在不同方法中定义的内部类中的非最终变量值”。有没有什么办法解决这一问题?非常感谢

【问题讨论】:

  • 为了比较,您必须使用“==”而不是“=”。对于字符串比较,使用字符串等于函数。
  • 好吧,您不能将字符串与“=”运算符进行比较。基本的java!我发布了一个答案。

标签: android eclipse textfield onclicklistener


【解决方案1】:

使用 final String value = et.getText().toString();

然后使用, if(value.equals("a") { }

【讨论】:

  • 在回答和工作之前做到了。感谢和抱歉给您带来的麻烦
  • @user3265784 那么你应该投票并选择答案。
【解决方案2】:

如果你想比较一个字符串的值,你应该使用“equals”方法而不是“=”。

代码将如下所示:

EditText et = (EditText)findViewById(R.id.editText1);
final String value = et.getText().toString();
ImageButton ib = (ImageButton)findViewById(R.id.imageButton1);

ib.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        if (value.equals("a") ) {
           //do something }
        }
    });

【讨论】:

    【解决方案3】:
    final String value = et.getText().toString();
    

    【讨论】:

    • 试过了。它说 Type mismatch: cannot convert from String to boolean =/
    • 试试 if(value.equals("a"))
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-25
    • 2014-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多