首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >片段类中的TimePickerDialog

片段类中的TimePickerDialog
EN

Stack Overflow用户
提问于 2018-05-02 04:59:46
回答 3查看 1.5K关注 0票数 3

我能实现吗?

代码语言:javascript
复制
TimePickerDialog.OnTimeSetListener

片段类?

如果可能的话,

这是我的TimePickerFragment.class

代码语言:javascript
复制
public class TimePickerFragment extends DialogFragment {


@NonNull
@Override

public Dialog onCreateDialog(Bundle savedInstanceState) {
    Calendar c = Calendar.getInstance();
    int cHour = c.get(Calendar.HOUR_OF_DAY);
    int cMinute = c.get(Calendar.MINUTE);

    return new TimePickerDialog(getActivity(), (TimePickerDialog.OnTimeSetListener) getActivity(), cHour, cMinute, android.text.format.DateFormat.is24HourFormat(getActivity()));
}
}

我需要修改这段代码以便在片段类中使用它吗?

这就是我想要实现的地方。

代码语言:javascript
复制
public class BluetoothFragment extends Fragment

我已经试过了,但是我发现了这个错误

代码语言:javascript
复制
java.lang.ClassCastException: com.example.android.bluetoothplantdroid.MainActivity cannot be cast to android.app.TimePickerDialog$OnTimeSetListener
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-05-02 05:31:17

按照下面的代码:传递活动或片段上下文。

代码语言:javascript
复制
public static void setTimeFromTimePicker(Context context, EditText editText) {

        int hourOfDay, minute;

        final Calendar c = Calendar.getInstance();
        hourOfDay = c.get(Calendar.HOUR_OF_DAY);
        minute = c.get(Calendar.MINUTE);

        TimePickerDialog dpd = new TimePickerDialog(context, (timePicker, hourOfDay1, minute1) -> {

            Time time = new Time(hourOfDay1, minute1, 0);

            SimpleDateFormat simpleDateFormat = new 
            SimpleDateFormat("hh:mm aa", Locale.getDefault());
            String s = simpleDateFormat.format(time);
            editText.setText(s);
        }, hourOfDay, minute, false);

        dpd.show();
    }
票数 2
EN

Stack Overflow用户

发布于 2018-05-02 05:19:11

您可以将侦听器设置为您的DialogFragment以获得原始片段中的回调。

代码语言:javascript
复制
public class TimePickerFragment extends DialogFragment {

    public static TimePickerFragment newInstance() {
        return new TimePickerFragment();
    }

    private TimePickerDialog.OnTimeSetListener listener;

    @NonNull
    @Override
    public Dialog onCreateDialog(Bundle savedInstanceState) {
        Calendar c = Calendar.getInstance();
        int cHour = c.get(Calendar.HOUR_OF_DAY);
        int cMinute = c.get(Calendar.MINUTE);

        return new TimePickerDialog(getActivity(), listener, cHour, cMinute,
                android.text.format.DateFormat.is24HourFormat(getActivity()));
    }

    public void setListener(TimePickerDialog.OnTimeSetListener listener) {
        this.listener = listener;
    }
}

所以你才能从原始片段中得到一个回调-

代码语言:javascript
复制
public class MyFragment extends Fragment implements TimePickerDialog.OnTimeSetListener {

   May be click event of some widget... {
       TimePickerFragment.newInstance().setListener(this);
       // Show your dialog
   }

    @Override
    public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
        // data when time has been set.
    }

}
票数 4
EN

Stack Overflow用户

发布于 2018-05-02 05:34:13

代码语言:javascript
复制
import android.app.Dialog;
import android.app.DialogFragment;
import android.app.Fragment;
import android.app.TimePickerDialog;
import android.os.Bundle;
import android.text.format.DateFormat;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TimePicker;

import java.util.Calendar;

/**
 * A simple {@link Fragment} subclass.
 */
public class TimePickerFragment extends DialogFragment implements TimePickerDialog.OnTimeSetListener {


    public TimePickerFragment() {
        // Required empty public constructor
    }

    @Override
    public Dialog onCreateDialog(Bundle savedInstanceState) {
        // Use the current time as the default values for the picker

        final Calendar calendar = Calendar.getInstance();
        int hour = calendar.get(Calendar.HOUR_OF_DAY);
        int minute = calendar.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
    }
}

警告:如果应用程序支持低于3.0的Android3.0版本,请确保调用getSupportFragmentManager()来获取FragmentManager的实例。还要确保显示时间选择器的活动扩展了FragmentActivity,而不是标准的活动类.

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50127423

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档