6

ユーザーが変更を開始するとすぐに、datepicker の変更を検出できるようにしたいと考えています。ただし、datrpickerdialog は使用したくありません。datepicker で日付を変更したときに onDateSet(DatePicker arg0, int arg1, int arg2, int arg3) が起動しない理由を知っている人はいますか?

それについてのコメントをいただければ幸いです。乾杯

これが私のコードの簡略版です:

public class AddItem extends Activity  implements OnDateChangedListener,OnDateSetListener{

DatePicker start ;

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.entryelements);
    start = (DatePicker) findViewById(R.id.start);

@Override
public void onDateChanged(DatePicker view, int year, int monthOfYear,
        int dayOfMonth) {

    // TODO Auto-generated method stub
    Toast.makeText(getApplicationContext(),
            " thiv view"+year,
            Toast.LENGTH_LONG).show();
    Log.v("indatechange", "ok");

}

@Override
public void onDateSet(DatePicker arg0, int arg1, int arg2, int arg3) {
    // TODO Auto-generated method stub
    Toast.makeText(getApplicationContext(),
            " thiv view"+arg0,
            Toast.LENGTH_LONG).show();
    Log.v("indatechange", "ok");
}

}

4

4 に答える 4

8

OnDateChangedListenerについてDatePickerに通知する必要があります。通常のウィジェットとは異なり、DatePickerにはsetOnDateChangedListener()...がありませんが、ありますinit()init()デフォルトの日付を設定し、リスナーを一緒に宣言するために使用します。

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.entryelements);

    // Set the date to now
    Calendar calendar = Calendar.getInstance();
    start = (DatePicker) findViewById(R.id.start);
    start.init(calendar.get(Calendar.YEAR), calendar.get(Calendar.MONTH), calendar.get(Calendar.DAY_OF_MONTH), this);
}
于 2012-11-09T16:55:47.250 に答える
0
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.entryelements);
start = (DatePicker) findViewById(R.id.start);

expirationDate=(EditText) findViewById(R.id.expirationDate);
Calendar calendar = Calendar.getInstance();
start = (DatePicker) findViewById(R.id.start);
MyOnDateChangeListener onDateChangeListener = new MyOnDateChangeListener();
start.init(calendar.get(Calendar.YEAR), calendar.get(Calendar.MONTH), calendar.get(Calendar.DAY_OF_MONTH), onDateChangeListener);
}

public class MyOnDateChangeListener implements OnDateChangedListener {
    @Override
    public void onDateChanged(DatePicker view, int year, int month, int day) {
        int mon=month+1;
        expirationDate.setText(day+"/"+mon+"/"+year);
    }
}
于 2015-02-16T08:25:56.610 に答える
0

インタラクションについて積極的に通知したい場合は、DatePicker でinit(year, month, day, onDateChangedListener)メソッドを呼び出してセットアップする必要があります。

最初に特定の日付を表示するように初期化したい場合、 updateDate メソッドの代わりにこれを呼び出すのが理にかなっています (これがあなたがしていることですか? または、開始値が何であるかを気にしていませんか?)

DatePickerDialog のように OnDateSetListener をサポートしていないことに注意してください。これは、ユーザーがピッカーとの対話をいつ終了したかを UI が知る方法があることを意味するためです。対話ではないので、終わったと思ったら自分で決めなければなりません。OnDateChangedListener を追跡するだけで、それは理にかなっています。

于 2012-11-10T02:53:13.963 に答える