2015-04-18 28 views
0

我最近开始在android中开发,目前我被困在一个点,我需要从对话框中接收值。我有一个扩展fragmentActivity和AlertDialog类的mainActivity。如何从alertdialog传递yes/no值android

1)我在AlertDialog类中创建了一个静态方法showDefalutDialog,并从mainActivity按钮单击了侦听器,并将参数传递给alertDialog。

2)在showDefalutDialog静态方法中,我分别创建了.setPositivebutton和.setNegativeButton,并带有一个Yes/No DialogInterface。

现在,这就是我想要做的。

1)当点击界面上的按钮时,它应该返回一个值到mainActivity ,所以我可以在if语句中执行它以执行某个功能。

从Windows的C#编程这样的移动是没有问题的,但我只是不知道如何实现,在下面Android是相关的代码剪断

private void sendSms() 
{ 

    SharedPreferences pref = getApplicationContext().getSharedPreferences("Sms_MyPref", 0); 
     mail = pref.getString("email", null); // getting String 
     tel = pref.getString("receiver_tel", null); // getting String 
     layout = (LinearLayout)findViewById(R.id.linearLayout1); 
     from_dateEdit = (EditText) findViewById(R.id.date_edit); 
     to_dateEdit = (EditText) findViewById(R.id.date_edit_to); 
     snButton = (Button)findViewById(R.id.form_send_button); 
     from = (Button)findViewById(R.id.from); 
     to = (Button)findViewById(R.id.to); 



     spn = (Spinner)findViewById(R.id.form_spinner); 
     spn.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { 
      public void onItemSelected(AdapterView<?> parent, View view, int pos, long id) { 
       Object item = parent.getItemAtPosition(pos); 
       spinnerV = (String) item; 

       if(pos == 0) 
       { 
        layout.setVisibility(pos == 0 ? View.VISIBLE : View.VISIBLE); 

        from_dateEdit.setText(DatePickerFragment.getYesteesDate()); 
        from.setOnClickListener(new Button.OnClickListener(){ 
         @Override 
         public void onClick(View v) {  
          // TODO Auto-generated method stub 
          showDatePicker();  
         } 
        }); 

        to_dateEdit.setText(DatePickerFragment.getTodaysDate()); 
        to.setOnClickListener(new Button.OnClickListener(){ 
         @Override 
         public void onClick(View v) {  
          // TODO Auto-generated method stub 
          showDatePicker2();  
         } 
        }); 

       new1 = null; 
       new2 = null; 
        from_dateEdit.setText(new1); 
       to_dateEdit.setText(new2); 


       } 
       else if(pos == 1) 
       { 
        layout.setVisibility(pos == 1 ? View.GONE : View.VISIBLE); 
        new1 = null; 
        new2 = null; 
        new1 = "a"; 
        new2 = "b"; 
       } 
       else if(pos == 2) 
       { 
        layout.setVisibility(pos == 2 ? View.GONE : View.VISIBLE); 
        new1 = null; 
        new2 = null; 
        new1 = "a"; 
        new2 = "b"; 
       } 
       else if(pos == 3) 
       { 
        layout.setVisibility(pos == 3 ? View.GONE : View.VISIBLE); 
        new1 = null; 
        new2 = null; 
        new1 = "a"; 
        new2 = "b"; 
       } 


      } 
      public void onNothingSelected(AdapterView<?> parent) { 
      } 
     }); 



     snButton.setOnClickListener(new OnClickListener() { 

     public void onClick(View view) 
      { 
       if(new1 == null && new2 == null) 
       { 
       alert.showAlertDialog(MainActivity.this, "Error..", "Please specify a date range", false); 
       } 
       else if(new1 != null && new2 == null) 
        { 
        alert.showAlertDialog(MainActivity.this, "Error..", "Please specify a date TO", false); 
        } 
       else if(new1 == null && new2 != null) 
         { 
         alert.showAlertDialog(MainActivity.this, "Error..", "Please specify a date FROM", false); 
         } 


       else 
       { 
       gen = new1.toString()+","+new2.toString(); 
       alert(); 

      //i want to return a value from dialog yes/no click 

      if(/*dialog yes is clicked*/) 
      { 

       sms(); 
      } 
      else if(/*dialog No is clicked*/) 
      { 
       return; 
      } 


       } 

     } 
     }); 


     } 

    private void alert() 
{ 
    AlertDialogManager.showDefalutDialog(getApplicationContext(), spinnerV, mail, new1,new2); 
} 

public void sms() 
{ 
    String both = "{"+ spinnerV.toString() + ","+gen.toString()+","+ mail.toString()+"}"; 

    sendSMS(tel,both); 
} 

和showDefaultDialog静态方法从AlertDialog类

@SuppressLint("InflateParams") 
public static void showDefalutDialog(final Context context, String order, final String mail, String fromD, String toD) { 
    AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(context); 
     // set title 
     alertDialogBuilder.setTitle(R.string.finalmsg); 

     LayoutInflater li = LayoutInflater.from(context); 
     View view = li.inflate(R.layout.data_summary_view, null); 

     EditText EMAIL = (EditText)view.findViewById(R.id.Email); 
     EditText Selectedorder = (EditText)view.findViewById(R.id.order); 
     EditText Dfrom = (EditText)view.findViewById(R.id.edit_from); 
     EditText Dto= (EditText)view.findViewById(R.id.edit_to); 
     LinearLayout ll = (LinearLayout) view.findViewById(R.id.datelayout); 
     LinearLayout l2 = (LinearLayout) view.findViewById(R.id.datelayout2); 

     Selectedorder.setText(order); 
     EMAIL.setText(mail); 
     if(fromD.toString() != "a" && toD.toString() != "b") 
     { 
      ll.setVisibility(View.VISIBLE); 
      l2.setVisibility(View.VISIBLE); 
      Dfrom.setText(fromD); 
      Dto.setText(toD); 
     } 
     else if(fromD.toString() == "a" && toD.toString() == "b") 
     { 
      ll.setVisibility(View.GONE); 
      l2.setVisibility(View.GONE); 


     } 
     // set dialog message 
     alertDialogBuilder.setView(view); 
     //int msdt = data.toString().toCharArray().length; 
     //Toast.makeText(context, "MsData char count : " + msdt , Toast.LENGTH_SHORT).show();; 
     alertDialogBuilder 
      .setOnCancelListener(new OnCancelListener() {    
       @Override 
       public void onCancel(DialogInterface dialog) { 
        try { 
         Intent main = new Intent(context, MainActivity.class); 
         main.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP|Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_NEW_TASK); 
         context.startActivity(main); 
        } catch (Exception e) { 
         Log.d(TAG, "Error while starting Main activity from Dialog ! "); 
        } 
       } 
      }) 
      .setPositiveButton("Yes",new DialogInterface.OnClickListener() { 
       public void onClick(DialogInterface dialog,int id) {   
        Toast.makeText(context,"Your Order will be sent to "+ mail +" please check your inbox for comfirmation." , Toast.LENGTH_SHORT).show(); 

        dialog.cancel(); 


       } 


       }) 
      .setNegativeButton("No",new DialogInterface.OnClickListener() { 
       public void onClick(DialogInterface dialog,int id) { 
        dialog.dismiss(); 
       } 
      }); 

      // create alert dialog 
      AlertDialog alertDialog = alertDialogBuilder.create(); 
      // show it 
      alertDialog.show();   
} 

回答

1

可以定义你自定义接口simmilar这一个:

public interface MyDialogClickListener { 
    void onPositiveClicked(String value); 
} 

然后创建实例,并传递给方法,在其中创建对话框:

public static void showDeafultDialog(..., MyDialogClickListener listener) { 
    // ... 
    .setPositiveButton("Yes", new DialogInterface.OnClickListener() { 
     public void onClick(DialogInterface dialog,int id) { 

      listener.onPositiveClicked("you can pass yout value here") 
     } 
    }) 
    // ... 
} 

手柄结果:

private void sendSms() { 
    AlertDialogManager.showDeafultDialog(..., new MyDialogClickListener() { 
     @Override 
     public void onPositiveClicked(String value) { 
      // do whatever you want with value 
     } 
    }); 
+0

TY我会尝试一下 – heskey

+0

我得到新MyDialogClickListener – heskey

+0

什么样的错误错误? logcat的? – skywall