2013-02-27 140 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