我知道這個問題以前已經提過好幾次了,但是我在閱讀了很多答案之後,並沒有找到適合我的東西。首先,請看下面的代碼,一旦圖像被點擊,應該打開一個AlertDialog(這個工作完美)。該AlertDialog舉辦一個EditText場 - 這就是問題出現了:Android:無法引用以不同方法定義的內部類中的非最終變量
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);
不能按我的要求工作。
我想要做的是,當用戶在對話框中放置一個值,並通過按下確定關閉它,該值被存儲在couponAmountString
- 迄今爲止這麼好。當用戶再次觸摸圖像以重新打開對話框時,我嘗試使用將EditText字段預先設置爲輸入的最後一個值,因此couponAmount.setText(couponAmountString);
。但是這不起作用,因爲我必須將EditText字段聲明爲final
。這就是爲什麼當我第二次點擊圖像時出現錯誤Cannot refer to a non-final variable inside an inner class defined in a different method
。
那麼有什麼辦法可以完成我想要的嗎?
謝謝!