2013-02-27 13 views
18

Ho letto molti post su questo argomento ma non riesco a trovare quelli validi per questo caso.Riportare la stringa dal frammento della finestra di dialogo all'attività

Ho una finestra di dialogo di selezione orari e ho messo insieme i valori interi in una stringa e ho bisogno di riportare questa stringa all'attività principale.

Questo valore di stringa verrà quindi utilizzato per impostare il testo di un pulsante.

Se qualcuno potesse aiutarmi con questo sarebbe più apprezzato.

Grazie

Dialog Frammento

public class TimePickerFragment extends DialogFragment implements TimePickerDialog.OnTimeSetListener { 
    @Override 
    public Dialog onCreateDialog(Bundle savedInstanceState) { 
     // Use the current time as the default values for the picker 
     final Calendar c = Calendar.getInstance(); 
     int hour = c.get(Calendar.HOUR_OF_DAY); 
     int minute = c.get(Calendar.MINUTE); 

     // Create a new instance of TimePickerDialog and return it 
     return new TimePickerDialog(getActivity(), this, hour, minute, DateFormat.is24HourFormat(getActivity())); 
    } 

    public void onTimeSet(TimePicker view, int hourOfDay, int minute) { 
     // Do something with the time chosen by the user 
     String Time =Integer.toString(hourOfDay) + " : " + Integer.toString(minute); 
    } 
} 

Codice

@Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_second); 


     Button btn = (Button) findViewById(R.id.start_time_button); 
     Button.setText(Time); 


    } 

risposta

48

Il metodo preferito è quello di utilizzare un callback per ottenere un segnale da un Fragment. Inoltre, questo è il metodo consigliato proposto da Android a Communicating with the Activity

Per il tuo esempio, nel tuo DialogFragment, aggiungi un'interfaccia e registrala.

public static interface OnCompleteListener { 
    public abstract void onComplete(String time); 
} 

private OnCompleteListener mListener; 

// make sure the Activity implemented it 
@Override 
public void onAttach(Activity activity) { 
    super.onAttach(activity); 
    try { 
     this.mListener = (OnCompleteListener)activity; 
    } 
    catch (final ClassCastException e) { 
     throw new ClassCastException(activity.toString() + " must implement OnCompleteListener"); 
    } 
} 

ora implementano questa interfaccia nel vostro Activity

public class MyActivity extends Activity implements MyDialogFragment.OnCompleteListener { 
    //... 

    public void onComplete(String time) { 
     // After the dialog fragment completes, it calls this callback. 
     // use the string here 
    } 
} 

Ora nel tuo DialogFragment, quando un utente fa clic sul pulsante OK, inviare quel valore di nuovo alla Activity tramite il callback.

public void onTimeSet(TimePicker view, int hourOfDay, int minute) { 
    String time = Integer.toString(hourOfDay) + " : " + Integer.toString(minute); 
    this.mListener.onComplete(time); 
} 
+0

Grazie per la vostra risposta, l'unico bit di cui sono un po 'incerto è la classe nell'attività. Cosa metto per 'FragmentActivity' – user2059311

+0

'FragmentActivity' è solo il tuo' Activity'. Puoi implementarlo anche lì. Aggiornerò la risposta – Kirk

+0

Penso che sia quasi funzionante, ho 1 ultimo errore nell'attività sulla linea – user2059311

Problemi correlati