Android:不能引用在不同方法中定义的内部类中的非final变量

时间:2012-08-17 02:19:04

标签: android android-edittext alertdialog final

我知道这个问题之前曾被问过好几次,但是在读了很多答案后,我找不到适合我的东西。首先,请查看以下代码,该代码在单击图像后打开AlertDialog(这非常有效)。 AlertDialog托管一个EditText字段 - 这就是出现问题的地方:

    ImageView scissorsImage = (ImageView) findViewById(R.id.scissorsImage);
    scissorsImage.setOnClickListener(new View.OnClickListener() {
        public void onClick(View view) 
        {
            AlertDialog.Builder alert = new AlertDialog.Builder(context);

            alert.setTitle("Apply a Coupon");
            alert.setMessage("Enter the coupon amount (i.e. 25 for $25)");

            // Set an EditText view to get user input 
            final EditText couponAmount = new EditText(context);
            alert.setView(couponAmount);

            couponAmount.setText(couponAmountString);

            alert.setPositiveButton("Ok", new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int whichButton) {
                    String couponAmountString = couponAmount.getText().toString();
                    System.out.println(couponAmountString);
                }
            });

            alert.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int whichButton) {
                    // Canceled.
                }
            });

            alert.show();
        }

    });

现在,这段代码位于我的onCreate方法中,变量couponAmountString位于onCreate方法之外。所以代码执行得很好,唯一的问题是行couponAmount.setText(couponAmountString);不能按我的意愿工作。

我想要做的是当用户在对话框中放入一个值,然后按OK关闭它,该值将存储在couponAmountString中 - 到目前为止一直很好。当用户再次触摸图像以重新打开对话框时,我尝试使EditText字段预先设置了他们输入的最后一个值,因此couponAmount.setText(couponAmountString);。但这不起作用,因为我必须将EditText字段声明为final。这就是我第二次点击图片时出现错误Cannot refer to a non-final variable inside an inner class defined in a different method的原因。

那么有什么方法可以实现我的目标吗?

谢谢!

1 个答案:

答案 0 :(得分:1)

傻,傻,我。事实证明,我正在重新初始化方法中的couponAmountString,你可以看到。我只需要取出String,现在就可以了!