1

我意识到您需要在执行以下代码之前进行交易。如何使该事务成为 TimePickerDialog?

            DialogFragment newFragment = new DialogFragment();
        newFragment.show(getFragmentManager(), "dialog");

我将如何将该代码与此代码集成:

    private TimePickerDialog.OnTimeSetListener mTimeSetListener =
            new TimePickerDialog.OnTimeSetListener() {
                public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
                    mHour = hourOfDay;
                    mMinute = minute;
                }
    };
    @Override
    protected Dialog onCreateDialog(int id) {
        Log.d("is it in here","");
        switch (id) {
        case TIME_DIALOG_ID:
            return new TimePickerDialog(this,
                    mTimeSetListener, mHour, mMinute, false);
        }
        return null;

新代码如下。由于“this”,它给出了一个未定义的构造函数错误。我该如何解决?我知道我需要传递一个上下文..但是如何?

        public static class MyAlertDialogFragment extends DialogFragment {
        private int mHour;
        private int mMinute;
        public static MyAlertDialogFragment newInstance(int title) {
            MyAlertDialogFragment frag = new MyAlertDialogFragment();
            Bundle args = new Bundle();
            args.putInt("title", title);
            frag.setArguments(args);
            return frag;
        }
        private TimePickerDialog.OnTimeSetListener mTimeSetListener =
                new TimePickerDialog.OnTimeSetListener() {
                    public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
                        mHour = hourOfDay;
                        mMinute = minute;
                    }
        };
        @Override
        public Dialog onCreateDialog(Bundle savedInstanceState) {
            Log.d("is it in here","");
            case TIME_DIALOG_ID:
                return new TimePickerDialog(this,
                        mTimeSetListener, mHour, mMinute, false);
            return null;

        }
    }

代码编辑#2:

        public TimePickerDialog.OnTimeSetListener mTimeSetListener =
            new TimePickerDialog.OnTimeSetListener() {
                public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
                    mHour = hourOfDay;
                    mMinute = minute;
                }
    };
    public void notification(String value){
        // add a click listener to the button
        //showDialog(TIME_DIALOG_ID);
        new TimePickerDialog(this, mTimeSetListener, mHour, mMinute, false);

        // get the current time
        //final Calendar c = Calendar.getInstance();
        //mHour = c.get(Calendar.HOUR_OF_DAY);
        //mMinute = c.get(Calendar.MINUTE);

    } 
4

4 回答 4

0

我不确定您当前要回答哪个编辑,但是对于编辑一个,您可以像这样替换它:

return new TimePickerDialog(getActivity(), mTimeSetListener, mHour, mMinute, false);
于 2012-04-26T14:53:11.817 回答
0

http://www.mkyong.com/android/android-time-picker-example/

您不需要时间选择器的事务,但是您可以在额外的 layout.xml 中设置一个时间选择器,用它填充一个片段并像您已经做的那样启动一个新的对话框片段。

此外,如果你想显示一个对话框,你真的不需要片段。你可以使用

new TimePickerDialog.show()

您所做的方式已被弃用,其中对话框通过当前活动的“onCreateDialog()”推送。见http://developer.android.com/reference/android/app/Activity.html#onCreateDialog(int )

于 2012-04-24T13:20:34.930 回答
0

您完全按照通常为活动进行的方式进行操作。唯一的区别是您的 TimePickerDialog 将在 DialogFragment 中创建。

即,您需要创建 DialogFragment 子类(就像活动的子类一样),将您的选择器和其他所有东西放在那里,仅此而已 - 不涉及魔法:-)

于 2012-04-24T13:21:52.990 回答
0

我的片段,它适用于对话框和嵌入式显示(见下文):

public class TimePickerFragment extends DialogFragment implements TimePickerDialog.OnTimeSetListener {

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        Time t = new Time();
        t.setToNow();

       // Uses the current time as the default values for the picker
       Bundle args = getArguments();
       int hour = args.getInt(GLarmStrings.FRAGMENT_ARGS_TIME_PICKER_HOUR, t.hour);
       int minute = args.getInt(GLarmStrings.FRAGMENT_ARGS_TIME_PICKER_MINUTE, t.minute);

       TimePicker tp = new TimePicker(getActivity());
       tp.setIs24HourView(GLarmApp.is24HourEnabled(getActivity()));
       tp.setCurrentHour(hour);
       tp.setCurrentMinute(minute);
       tp.setOnTimeChangedListener(...)
       return tp;
    }

    @Override
    public Dialog onCreateDialog(Bundle savedInstanceState) {
        Time t = new Time();
        t.setToNow();

       // Use the current time as the default values for the picker
       Bundle args = getArguments();
       int hour = args.getInt(GLarmStrings.FRAGMENT_ARGS_TIME_PICKER_HOUR, t.hour);
       int minute = args.getInt(GLarmStrings.FRAGMENT_ARGS_TIME_PICKER_MINUTE, t.minute);

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

    @Override
    public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
        // TODO Auto-generated method stub
    }   
}

要使用它:

if (hasDialogFrame) {
    fragment.setShowsDialog(false); // maybe unnecessary
    FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
    ft.add(R.id.main_dialogs, fragment, "test").commit();  
} else {
    fragment.setShowsDialog(true); // maybe unnecessary
    fragment.show(getSupportFragmentManager(), GUI_DIALOG_TIME_PICKER);
}
于 2014-01-26T17:12:50.010 回答