2016-09-16 88 views
-2

我有一個打開對話框以更改數字的按鈕。該按鈕處於活動狀態,並生成一個新的類名對話框,用於存儲不同的對話框。關閉對話框後執行

對話框consigna: Dialogs.class

public String consigna(){ 


     AlertDialog.Builder alert = new AlertDialog.Builder(ctxt); 
     alert.setTitle("Nueva temperatura"); 
     alert.setMessage("Agrega una nueva temperatura"); 
     final EditText input = new EditText(ctxt); 
     input.setInputType(InputType.TYPE_CLASS_NUMBER); 
     input.setRawInputType(InputType.TYPE_CLASS_NUMBER); 
     alert.setView(input); 
     alert.setPositiveButton("Ok", new DialogInterface.OnClickListener() { 
      public void onClick(DialogInterface dialog, int whichButton) { 
       data = input.getText().toString(); 

      } 
     }); 
     alert.setNegativeButton("cancel", new DialogInterface.OnClickListener() { 
      public void onClick(DialogInterface dialog, int whichButton) { 
       //Put actions for CANCEL button here, or leave in blank 
      } 
     }); 
     alert.show(); 

    return data; 
    } 

上點擊按鈕: MainActivity

//I need change these two values: 

final public double temperatura = 200.3; 
String newData; 

... 

public void onClick(View v) { 

     switch (v.getId()){ 

      case R.id.tempConsigna: 
       dialog = new Dialogs(MainActivity.this); 
       String data = dialog.consigna(); 
       newData = data; 
       break; 

...//other cases... 

的問題是newData =數據;我沒有數據,因爲對話框沒有關閉。該對話框在其他線程中工作,不是嗎?

如何使用對話框結果更改newData var?它可以成爲一個對話課程?

+0

你可以使用回調的概念(接口)了點。 –

+0

你可以擁有和使用這個?鏈接?我不知道這是什麼。 – WIngenia

+0

我正在添加我的答案,請等待 –

回答

2

你需要通過接口實現的回調方法:

 public String consigna(final OnConfirm confirm){ 
      final String[] data = new String[1]; 
      AlertDialog.Builder alert = new AlertDialog.Builder(activity); 
      alert.setTitle("Nueva temperatura"); 
      alert.setMessage("Agrega una nueva temperatura"); 
      final EditText input = new EditText(activity); 
      input.setInputType(InputType.TYPE_CLASS_NUMBER); 
      input.setRawInputType(InputType.TYPE_CLASS_NUMBER); 
      alert.setView(input); 
      alert.setPositiveButton("Ok", new DialogInterface.OnClickListener() { 
       public void onClick(DialogInterface dialog, int whichButton) { 
        data[0] = input.getText().toString(); 
        confirm.onConfirm(data[0]); 
       } 
      }); 
      alert.setNegativeButton("cancel", new DialogInterface.OnClickListener() { 
       public void onClick(DialogInterface dialog, int whichButton) { 
        //Put actions for CANCEL button here, or leave in blank 
       } 
      }); 
      alert.show(); 

      return data[0]; 
     } 


public interface OnConfirm { 
     void onConfirm(String s); 
    } 

並在您的主要活動

Dialogs dialog = new Dialogs(MainActivity.this); 
     dialog.consigna(new Dialogs.OnConfirm() { 
      @Override 
      public void onConfirm(String s) { 

       Log.d("data", s); 
      } 
     }); 
+0

完美,謝謝! – WIngenia

0

它不會按照你想要的結果返回結果,但是在點擊對話框確定按鈕然後訪問數據變量。不需要返回。

+0

是的,我知道。但是如何用對話結果改變主要活動中的變量? – WIngenia

+0

您是否可以分享您分享的活動代碼? –

+0

我編輯主帖Bansai – WIngenia