【问题标题】:onDateSet does not get called from DatePickerDialog on tablet平板电脑上的 DatePickerDialog 不会调用 onDateSet
【发布时间】:2012-09-02 21:43:30
【问题描述】:

我正在使用 DatePickerDialog 来提示用户输入日期。它在模拟器和我的三星 Galaxy Nexus 上运行良好,但在我的三星 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();
    }
}

什么可能导致这种情况?平板电脑中的错误?我错过了什么吗?谁能想到解决方法?

非常感谢!

【问题讨论】:

    标签: java android tabs galaxy datepickerdialog


    【解决方案1】:

    我很惊讶它完全有效。 onDateSet() 在执行 default onClick 行为时被调用,但由于您完全设置了新按钮,因此您将摆脱原来的行为。你可以check the code out。你为什么不在onDateSet() 开始你的活动?如果您想要设置文本,那么您可以获取每个按钮而不是设置它们(getButton(BUTTON_POSITIVE))。

    另外,请注意 Jelly Bean 中存在一个新错误,其中onDateSet 将被调用两次,即使您按下返回也会被调用,并且他们还删除了默认的取消按钮。去图吧。

    【讨论】:

    • 这是一个answer,可以解决我提到的问题。
    • 感谢您为我指出了这个绝佳的选择!效果很好!
    猜你喜欢
    • 2012-12-07
    • 2012-08-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-25
    • 1970-01-01
    • 1970-01-01
    • 2012-02-17
    相关资源
    最近更新 更多