4

Androidチュートリアルの手順に従ってDatePickerDialogに問題があります。

以下に示すように、フォーカスされたときにTextViewをリンクしてDatePickerDialogを起動します。

EditText fNac = (EditText)findViewById(R.id.regFecha);
            fNac.setonfocusChangeListener(new View.onfocusChangeListener(){

                    @Override
                    public void onfocusChange(View v, boolean hasFocus) {
                            // TODO Auto-generated method stub
                            // Desde aquí lanzamos el datepicker
                            if (hasFocus){
                                    DialogFragment newFragment = new DatePickerFragment();
                                    newFragment.show(getSupportFragmentManager() , "datePicker");
                            }
                    }

正常に動作し、DatePickerDialogが起動します。この方法で作成された新しいDatePickerFragmentクラスをインスタンス化します。

import java.util.Calendar;

import android.app.DatePickerDialog;
import android.app.Dialog;
import android.os.Bundle;
import android.support.v4.app.DialogFragment;
import android.util.Log;
import android.widget.DatePicker;

public class DatePickerFragment extends DialogFragment implements DatePickerDialog.OnDateSetListener {

    private DatePickerDialog mDatePickerDialog;

    @Override
    public Dialog onCreateDialog(Bundle savedInstanceState){
            // Usamos la fecha actual como primera fecha a mostrar
            final Calendar c = Calendar.getInstance();
            int year = c.get(Calendar.YEAR);
            int month = c.get(Calendar.MONTH);
            int day = c.get(Calendar.DAY_OF_MONTH);

            // Devolvemos la instancia de un Dialog con la fecha actual
            mDatePickerDialog = new DatePickerDialog(getActivity(),this,year,month,day);
            return mDatePickerDialog;
    }

    @Override
    public void onDateSet(DatePicker view, int year, int month, int day) {
            // TODO Auto-generated method stub
            Log.v("LOG_CAT","OK");
    }

    public void onDateChanged(DatePicker view, int year, int monthOfYear,
                    int dayOfMonth) {
            // TODO Auto-generated method stub
            Log.v("LOG_CAT", "Ok2");
    }

}

そしてここに問題があります。onDateChangedメソッドを使用してDialogのタイトルを変更したいのですが、呼び出されません。onDateChangedListenerを作成しようとしましたが、DatePickerDialogに作成されていません。

これどうやってするの?

前もって感謝します。

4

3 に答える 3

6

DatePickerDialogクラスを拡張し、以下のようにonDateChangedをオーバーライドするだけです。Calendarオブジェクトを受け入れ、年、月、日自体を設定する新しいコンストラクターを含めたので、不要な入力を省くことができます。(これがオプションではない理由はわかりません。)とにかく、クラスと短いコンストラクターの使用方法は次のとおりです。

public class DatePickerFragment extends DialogFragment implements OnDateSetListener {
    public class MyDatePickerDialog extends DatePickerDialog {
        private Calendar calendar;
        private final String format = "EEEE, MMMM dd, yyyy";

        // Regular constructor
        public MyDatePickerDialog(Context context, OnDateSetListener callBack, int year, int monthOfYear, int dayOfMonth) {
            super(context, callBack, year, monthOfYear, dayOfMonth);
            calendar = Calendar.getInstance();
        }

        // Short constructor
        public MyDatePickerDialog(Context context, OnDateSetListener callBack, Calendar calendar) {
            super(context, callBack, calendar.get(Calendar.YEAR), calendar.get(Calendar.MONTH), calendar.get(Calendar.DAY_OF_MONTH));
            this.calendar = calendar;
        }

        @Override
        public void onDateChanged(DatePicker view, int year, int month, int day) {
            super.onDateChanged(view, year, month, day);
            calendar.set(year, month, day);
            setTitle(DateFormat.format(format, calendar));
        }
    }

    private MyDatePickerDialog mDatePickerDialog;

    @Override
    public Dialog onCreateDialog(Bundle savedInstanceState) {
        mDatePickerDialog = new MyDatePickerDialog(this, this, Calendar.getInstance());
        return mDatePickerDialog;
    }

    @Override
    public void onDateSet(DatePicker view, int year, int month, int day) {
        Log.v("DatePickerFragment", "onDateSet");
    }
}
于 2012-08-09T16:05:17.470 に答える
0

私には解決策があります。ダイアログでDatePickerを取得し、initメソッドを設定するだけです。

次に例を示します。

android.widget.DatePicker datePicker = mDatePickerDialog.getDatePicker();

このようにinitを設定します

datePicker.init(int YEAR、int MONTH、int Day、OnDateChangedListener)

この助けを願っています

于 2014-07-16T13:42:16.817 に答える
-2

多分あなたは言うべきです

public class DatePickerFragment extends DialogFragment 
    implements DatePickerDialog.OnDateSetListener, DatePicker.OnDateChangedListener {
    ...
}
于 2012-08-09T16:20:53.960 に答える