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

私のスニペット、それはダイアログと埋め込みディスプレイの両方で機能します(以下の方法を参照):

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 に答える
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 に答える