2012-08-17 73 views
0

我知道這個問題以前已經提過好幾次了,但是我在閱讀了很多答案之後,並沒有找到適合我的東西。首先,請看下面的代碼,一旦圖像被點擊,應該打開一個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方法中,變量couponAmountStringonCreate方法之外。所以代碼執行得很好,唯一的問題是線路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

那麼有什麼辦法可以完成我想要的嗎?

謝謝!

回答

1

傻,傻我。事實證明,我正在重新初始化方法中的couponAmountString,就像你看到的那樣。我只需要拿出String,它現在正在工作!

相關問題