简体   繁体   English

如何在另一个片段中的EditText中获取TimePickerDialog的时间?

[英]How to get the time of the TimePickerDialog in the EditText in another fragment?

I am trying to get the time of my TimePickerDialog to an EditText in the FinishPostFragment . 我正在尝试将我的TimePickerDialog的时间获取到FinishPostFragmentEditText

I am showing the selected time right now in a Toast but how can I show the data in the EditText in the FinishPostFragment ? 我现在在Toast中显示所选时间,但是如何在FinishPostFragmentEditText中显示数据?

FinishPostFragment in my onCreateView: 我的onCreateView中的FinishPostFragment:

timeButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            // view TimePickerDialog
            showTimeDialog(v);
        }
    });

FinishPostFragment outside my onCreateView: 我的onCreateView之外的FinishPostFragment:

public void showTimeDialog(View v){
    TimeDialogFragment tdf = new TimeDialogFragment();
    tdf.show(getFragmentManager().beginTransaction(), "TimePickerFragment");
}

TimePickerDialog.OnTimeSetListener test = new TimePickerDialog.OnTimeSetListener(){
    @Override
    public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
        time_finish.setText(String.valueOf(hourOfDay) + ":" + String.valueOf(minute));
    }
};

TimeSettings.java: TimeSettings.java:

public class TimeSettings implements TimePickerDialog.OnTimeSetListener {
    Context context;

    public TimeSettings(Context context){
        this.context = context;
    }

    @Override
    public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
        Toast.makeText(context, "Selected time is hour: " +hourOfDay+ " minute: " + minute, Toast.LENGTH_LONG).show();
    }
}

TimeDialogFragment: TimeDialogFragment:

public class TimeDialogFragment extends DialogFragment {

    @Override
    public Dialog onCreateDialog(Bundle savedInstanceState){
        Calendar calendar = Calendar.getInstance();

        int hour = calendar.get(Calendar.HOUR_OF_DAY);
        int minute = calendar.get(Calendar.MINUTE);

        TimePickerDialog dialog;

        TimeSettings timeSettings = new TimeSettings(getActivity());
        dialog = new TimePickerDialog(getActivity(), timeSettings, hour, minute,
                android.text.format.DateFormat.is24HourFormat(getActivity()));

        return dialog;
    }
}
@Override
public void onTimeSet(TimePicker view, int hourOfDay, int minute) {

Toast.makeText(context, "Selected time is hour: " +hourOfDay+ " minute: " + minute, Toast.LENGTH_LONG).show();
String time = "   "+hourString+"h"+minuteString+"m"+secondString+"s";
    yourTextView.setText(time);

} 

try this settting text to your textview like this. 尝试这样将文本放置到您的textview中。

Something close to what you have that might work is the following. 以下是您可能会用到的可能的解决方案。 Have your FinishPostFragment implement TimePickerDialog.OnTimeSetListener itself instead. 让您的FinishPostFragment实现TimePickerDialog.OnTimeSetListener本身。

Show the TimeDialaogFragment using getChildFragmentManager() instead. TimeDialaogFragment使用getChildFragmentManager()显示TimeDialaogFragment

tdf.show(getChildFragmentManager().beginTransaction(), "TimePickerFragment");

That will make it so you can then do the following in your TimeDialogFragment.onCreateView to send the selected time directly to the FinishPostFragment . 这样就可以完成,因此您可以在TimeDialogFragment.onCreateView执行以下操作,以将所选时间直接发送到FinishPostFragment

TimePickerDialog.OnTimeSetListener timeSetListener = 
        (TimePickerDialog.OnTimeSetListener) getParentFragment();

dialog = new TimePickerDialog(getActivity(), timeSetListener, hour, minute,
        android.text.format.DateFormat.is24HourFormat(getActivity()));

Note in order to use getParentFragment() you must be using the support library or targeting API 17+. 请注意,要使用getParentFragment() ,必须使用支持库或定位API 17+。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM