2012-04-24 33 views
0

從片段返回值的片段我調用一個對話從定製對話框

private void showDateDialog(){ 

     FragmentTransaction ft = getFragmentManager().beginTransaction(); 
      DialogFragment newFragment = new DatePickerDialogFragment((Fragment)this,localCalendar); 
      newFragment.show(ft, "dialog"); 
    } 

然後在定製對話框我所說的timesetlistener

@Override 
    public Dialog onCreateDialog(Bundle savedInstanceState) { 
     LayoutInflater inflater = LayoutInflater.from(getActivity()); 
      final View v = inflater.inflate(R.layout.time_dialog, null); 

      timePicker=(TimePicker)v.findViewById(R.id.timePicker1); 
      timePicker.setIs24HourView(true); 
      if (data!=null) { 
       timePicker.setCurrentHour(data.get(Calendar.HOUR_OF_DAY)); 
       timePicker.setCurrentMinute(data.get(Calendar.MINUTE)); 
      } 
      timePicker.setScaleX(2); 
      timePicker.setScaleY(2); 

      return new TimePickerDialog.Builder(getActivity()) 
      .setTitle(R.string.timeDialog1) 
      .setView(v) 

      .setCancelable(true) 
      .setPositiveButton(R.string.ok, new DialogInterface.OnClickListener() { 
       @Override 
       public void onClick(DialogInterface dialog, int which) { 
        //validation code 
        OnTimeSetListener otsl=(OnTimeSetListener)mFragment; 
        otsl.onTimeSet(timePicker, timePicker.getCurrentHour(), timePicker.getCurrentMinute()); 
       } 
      }) 
      .setNegativeButton(R.string.annulla, new DialogInterface.OnClickListener() { 
        @Override 
        public void onClick(DialogInterface dialog, int which) { 
         dialog.cancel(); 
        } 
       }).create(); 
    } 

,並在片段我實施OnTimeSetListener得到的值

public void onTimeSet(TimePicker view, int hour, int minute) { 
      localCalendar.set(Calendar.HOUR_OF_DAY, hour); 
      localCalendar.set(Calendar.MINUTE, minute); 
      updateTime(hour,minute); 
    } 

這工作正常。但我想另一個自定義對話框返回一個字符串,我不知道哪個偵聽器實現。我試過「onDismiss」,但我不能傳遞參數,我試着OnValueChangeListener,但作爲參數有2個整數(我需要一個字符串!)。 這是正確的方法嗎?我的意思是,使用聽衆。

好處是,從任何片段,實現onDateChange我可以啓動對話框並檢索值。

回答

0

好吧我自己回答:我無法弄清楚如何做到這一點,所以我使用這個解決方案: 我爲每個對話框構建了一個不同的類,用於解析調用片段並調用其中的方法。這不是最好的解決方案,但它的工作原理