0

DatePickerDialog を使用して、ユーザーに日付の入力を求めています。シミュレーターと Samsung Galaxy Nexus では問題なく動作しますが、Samsung Galaxy Tab 2 では onDateSet が呼び出されません。

ダイアログが大きくなり、通常のスピン ビュー以外にカレンダーが表示されることに気付きました。それが問題でしょうか?

ここにいくつかのコードがあります:

import java.util.Calendar;
import java.util.Date;

import android.app.DatePickerDialog;
import android.app.Dialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.os.Bundle;
import android.support.v4.app.DialogFragment;
import android.widget.DatePicker;

import com.cbit.gtbetapp.R;
import com.cbit.gtbetapp.gui.racedata.MeetingDataActivity;
import com.cbit.gtbetapp.gui.racedata.MeetingListFragment;
import com.cbit.gtbetapp.logic.Utility;

public class DatePickerFragment extends DialogFragment implements
        DatePickerDialog.OnDateSetListener {

    protected Date date = null;

    @Override
    public Dialog onCreateDialog(Bundle savedInstanceState) {

        // Use the current date as the default date in the picker
        final Calendar c = Utility.getToday();
        int year = c.get(Calendar.YEAR);
        int month = c.get(Calendar.MONTH);
        int day = c.get(Calendar.DAY_OF_MONTH);
        date = c.getTime();

        // Create a new instance of DatePickerDialog and return it
        DatePickerDialog dialog = new DatePickerDialog(getActivity(), this, year, month, day) {
            @Override
            public void onDateChanged(DatePicker view, int year, int month, int day) {
                super.onDateChanged(view, year, month, day);
                setTitle(getString(R.string.date_picker_title));
            }
        };
        dialog.setTitle(getString(R.string.date_picker_title));

        dialog.setButton(DatePickerDialog.BUTTON_POSITIVE,
                getString(android.R.string.ok), new DialogInterface.OnClickListener() {

                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        dialog.cancel();

                        Intent intent = new Intent(getActivity(), MeetingDataActivity.class);
                        intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
                        intent.putExtra(MeetingListFragment.EXTRA_DATE, date.getTime());
                        startActivity(intent);
                    }
                });
        dialog.setButton(DatePickerDialog.BUTTON_NEGATIVE,
                getString(R.string.button_cancel),
                new DialogInterface.OnClickListener() {

                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        dialog.cancel();
                    }
                });
        return dialog;
    }

    public void onDateSet(DatePicker view, int year, int month, int day) {
        Calendar c = Calendar.getInstance();
        c.clear();
        c.set(Calendar.YEAR, year);
        c.set(Calendar.MONTH, month);
        c.set(Calendar.DAY_OF_MONTH, day);
        date = c.getTime();
    }
}

何が原因でしょうか? タブレットのバグ?何か不足していますか?誰でも回避策を考えることができますか?

どうもありがとう!

4

1 に答える 1

4

それがまったく機能していることに驚いています。デフォルトの動作が実行さonDateSet()れると が呼び出されますが、新しいボタンを完全に設定しているため、元の動作は取り除かれています。コードをチェックアウトできます。で活動を開始しないのはなぜですか? テキストを設定したい場合は、ボタンを設定する代わりに各ボタンを取得できます ( )。 onClickonDateSet()getButton(BUTTON_POSITIVE)

また、Jelly Bean には新しいバグがあり、onDateSetwill が 2 回呼び出され、[戻る] を押しても呼び出され、デフォルトの [キャンセル] ボタンも削除されていることに注意してください。図に行きます。

于 2012-09-10T03:33:28.107 に答える