2013-02-27 141 views
18

我已經閱讀了很多文章,但是我找不到適用於此案例的任何文章。從對話框片段返回字符串返回到活動

我有一個時間選擇器對話框,我把整數值放在一個字符串中,我需要把這個字符串返回到主要活動。然後

此字符串的值將被用於設置一個按鈕的文本。

如果有人可以幫助我這個這將是最讚賞。

謝謝

對話片段

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); 
    } 
} 

代碼

@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); 


    } 

回答

48

的首選方法是使用一個回調以獲取從Fragment的信號。此外,這是Android推薦的方法,在Communicating with the Activity

對於您的示例,請在您的DialogFragment中添加一個接口並進行註冊。

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"); 
    } 
} 

現在實現這個接口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 
    } 
} 

現在,在您DialogFragment,當用戶單擊OK按鈕,發送值回Activity通過回調。

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

謝謝您的回覆,我唯一不確定的是活動中的班級。我爲「FragmentActivity」投入了什麼 – user2059311 2013-02-27 20:28:09

+0

'FragmentActivity'只是你的'活動'。你也可以在那裏實現它。我會更新答案。 – Kirk 2013-02-27 21:15:34

+0

我認爲它幾乎工作,我有1行上的最後一個錯誤 – user2059311 2013-02-27 21:59:47