我知道这个问题之前曾被问过好几次,但是在读了很多答案后,我找不到适合我的东西。首先,请查看以下代码,该代码在单击图像后打开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
的原因。
那么有什么方法可以实现我的目标吗?
谢谢!
答案 0 :(得分:1)
String
,现在就可以了!