2016-09-16 66 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