2014-02-22 18 views
4

它的一個非常愚蠢的問題,但我剛剛開始用java的android程序與幾天前的android,我不知道該怎麼辦....AlertDialog有兩個編輯 - 當按下按鈕確定 - >開始新的提示

所以我想要一個AlertDialog當你按下一個按鈕。此AlertDialog需要2個編輯。當你按下OK時,它必須計算一些東西,並在新的AlertDialog中顯示解決方案。

這就是我得到了什麼:

public void btn_own(View view) { 

     int a, b, c;  
     final String s; 

     AlertDialog.Builder alert = new AlertDialog.Builder(this); 

      alert.setTitle("Enter range"); 

      final EditText inputa = new EditText(this); 
      final EditText inputb = new EditText(this); 
      alert.setView(inputa); 
      alert.setView(inputb); 

       alert.setPositiveButton("Ok", new DialogInterface.OnClickListener() { 
        public void onClick(DialogInterface dialog, int whichButton) { 

         int aa, bb, cc , e ; 
         aa = new Integer(String.valueOf(inputa)); 
         bb = new Integer(String.valueOf(inputb)); 
         cc = bb - aa; 
         Random rand = new Random(); 
         int d = rand.nextInt(cc); 
         e = d + bb; 
         Integer out = new Integer(e); 


         s = out.toString(); 

         new AlertDialog.Builder(this) 
           .setMessage(s) 
           .show(); 
        } 
       }); 

    } 

最後的 「本」 是錯誤的。我得到的消息:

Builder(android.content.Context) in Builder cannot be applied to (android.content.DialogInterface.OnClickListener) 

,但我不知道我能寫的,而不是「這個」

一個另一個問題是,該「S」線條上「這個」被標記。 Cannot assign a value to final variable 's'

希望你能幫助我


編輯:

我的新代碼:

public void btn_own(View view) { 
    int a, b, c;  // a : untere Grenze , b : obere Grenze 


    AlertDialog.Builder alert = new AlertDialog.Builder(this); 

     alert.setTitle("Enter range"); 

     final EditText inputa = new EditText(this); 
     final EditText inputb = new EditText(this); 
     alert.setView(inputa); 
     alert.setView(inputb); 

      alert.setPositiveButton("Ok", new DialogInterface.OnClickListener() { 
       public void onClick(DialogInterface dialog, int whichButton) { 

        int aa = 0; 
        int bb = 0; 
        int cc = 0; 
        int e = 0; 
        try { 
         aa = Integer.parseInt(inputa.getText().toString()); 
        } catch (NumberFormatException f) { 
         System.out.println("not a number: " + inputa.getText().toString()); 
         f.printStackTrace(); 
        } 

        try { 
         bb = Integer.parseInt(inputb.getText().toString()); 
        } catch (NumberFormatException g) { 
         System.out.println("not a number: " + inputb.getText().toString()); 
         g.printStackTrace(); 
        } 
        cc = bb - aa; 
        Random rand = new Random(); 
        int d = rand.nextInt(cc); 
        e = d + bb; 
        Integer out = new Integer(e); 
        s = out.toString(); 

        new AlertDialog.Builder(Decider.this) 
          .setMessage(s) 
          .show(); 

       } 
      }); 
     alert.show(); 



}  

錯誤: 好了,現在它的工作原理是:我可以輸入一個號碼,然後我得到另一個隨機數。 但我怎麼能讓它工作如:我輸入一個範圍,我得到一個隨機數字? 它爲什麼只查看一個編輯?

回答

2

您不應該在其他AlertDialogs中嵌套AlertDialogs。

所以這樣的:

new AlertDialog.Builder(this) 
         .setMessage(s) 
         .show(); 

會使用錯誤的上下文,但你必須通過一個活動的背景下

嘗試使用YourActivity.thisview.getContext()作爲PARAM代替


更新:約你的NumberFormatException你應該試試這個:

try { 
     aa = Integer.parseInt(inputa.getText().toString()); 
} catch (NumberFormatException e) { 
     System.out.println("not a number: " + inputa.getText().toString()); 
     e.printStackTrace(); 
} 

但是你需要確定你的editText只允許數字!

+1

感謝您的更新,謝謝你的更新,但我必須在最後一小時做一些東西 所以,我編輯我的代碼,但我仍然得到無效int ...我仍然只有一個編輯...) 沒有想要像我想要的工作..:D – QNikE

+0

@ QNikE讓我們再試一次更新的代碼!;-),並在案件中打破了什麼將在日誌中? – donfuxx

+0

OKK用的try/catch 檢查更新 問題是試了一下:AA和BB「可能尚未初始化」 ,我仍然有隻有一個編輯,但我需要兩個... – QNikE

2

使用view.getContext()代替this這指的是OnClickListener上下文創建AlertDialog:

AlertDialog.Builder alert = new AlertDialog.Builder(view.getContext()); 

其次,如果你想在s的警報按鈕,點擊更改值,然後將其刪除sfinal外聲明它btn_own方法。

3

嘗試實現DialogInterface。OnClickListener您的活動(這是更好,因爲你不這樣使用更少的資源創造新的對象,這樣可以節省電池)

public class MyActivity extends Activity implements { 
    public void onClick(DialogInterface dialog, int whichButton) { 
     int aa, bb, cc, e; 
     aa = new Integer(String.valueOf(inputa)); 
     bb = new Integer(String.valueOf(inputb)); 
     cc = bb - aa; 
     Random rand = new Random(); 
     int d = rand.nextInt(cc); 
     e = d + bb; 
     Integer out = new Integer(e); 
     s = out.toString(); 
     new AlertDialog.Builder(this).setMessage(s).show(); 
    } 
} 

然後用此設置您的按鈕:

alert.setPositiveButton("Ok", this); 
0

要轉換一個int字符串中使用:

aa = Integer.parseInt(inputa.getText())); 

與try/catch語句圍繞着它,以避免用戶錯誤的輸入和您的例外

+1

Interger。解析不工作...不接受Inputa .... – QNikE

+0

aa = Integer.parseInt(inputa.getText())); – Athanor

+0

仍然是相同的錯誤 當我按下按鈕,我得到一個編輯警報,當我按下OK應用程序崩潰..... – QNikE

相關問題