【问题标题】:how to dismiss datepicker when the user clicks cancel button?当用户单击取消按钮时如何关闭日期选择器?
【发布时间】:2013-12-30 09:39:17
【问题描述】:

取消按钮在我的应用程序中不起作用。当我单击取消按钮时,它会显示时间选择器对话框而不是日期对话框关闭。

DatePickerFragment.java
@SuppressLint("ValidFragment")
public class DatePickerFragment extends DialogFragment implements
        DatePickerDialog.OnDateSetListener {
    Dialog dialog;
     private boolean mIgnoreTimeSet = false;
    public EditText activity_edittext;
    //OnDismissListener mOnDismissListener;
    public DatePickerFragment(EditText edit_text) {
        activity_edittext = edit_text;
    }

    @Override
    public Dialog onCreateDialog(Bundle savedInstanceState) {
        // Use the current date as the default date in the picker
        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);

        return new DatePickerDialog(getActivity(),this, year, month, day);

    }
    @Override
    public void onDateSet(DatePicker view, int year, int month,
            int day) {
        Log.d("date",String.valueOf(day) + "/"
                + String.valueOf(month + 1) + "/" + String.valueOf(year));
        activity_edittext.setText(String.valueOf(day) + "/"
                + String.valueOf(month + 1) + "/" + String.valueOf(year));
    }

  public void onDateCancel(DatePicker view, int year, int month,int day) { 
       dialog.dismiss();        
}
}

TimePickerFragment.java
@SuppressLint("ValidFragment")
public class TimePickerFragment extends DialogFragment implements
        TimePickerDialog.OnTimeSetListener {

    int  mhour,mminute;  

    public EditText activity_edittext;

    public TimePickerFragment(EditText edit_text) {
        activity_edittext = edit_text;
    }

    @Override
    public Dialog onCreateDialog(Bundle savedInstanceState) {
        // Use the current date as the default date in the picker
        final Calendar c = Calendar.getInstance();

        mhour  = c.get(Calendar.HOUR_OF_DAY);
        mminute = c.get(Calendar.MINUTE);

        return new TimePickerDialog(getActivity(),this, mhour,  mminute,false);
    }

    @Override
    public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
        mhour = hourOfDay;
        mminute = minute;
        Log.d("time",String.valueOf(mhour) + ":"
                + String.valueOf(mminute));
        activity_edittext.setText(String.valueOf(mhour) + ":"
                + String.valueOf(mminute)) ;
    }
}


TimeFragment.java
public  class TimeFragment extends Fragment{    
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        showTimePickerDialog(new EditText(getActivity()));
    }

    public void showDatePickerDialog(View v) {
        DatePickerFragment newFragment = new DatePickerFragment(new EditText(getActivity()));
        newFragment.show(getFragmentManager(), "datePicker");
        NowFragment fragment = new NowFragment();

        if (fragment != null) {
            FragmentManager fragmentManager = getFragmentManager();
            fragmentManager.beginTransaction()
                    .replace(R.id.frame_container, fragment).commit();
        }
    }

    private void showTimePickerDialog(EditText editText) {
         TimePickerFragment newFragment = new TimePickerFragment(new EditText(getActivity()));
            newFragment.show(getFragmentManager(), "timePicker");
            showDatePickerDialog(new EditText(getActivity()));
    }
}

【问题讨论】:

  • 您是否尝试删除“setCancelable(false);”行?
  • 是的,但它仍然无法正常工作

标签: android datepicker datetimepicker timepicker android-dialogfragment


【解决方案1】:

看起来 Jellybean 存在一个错误,即取消按钮不起作用(因此返回按钮)。这在Jelly Bean DatePickerDialog — is there a way to cancel? 中进行了讨论。

David Cesarino,在上面的帖子中报告了错误和解决方法,发布了他的解决方案here Cavega 稍微修改了上面的解决方案,允许将 DatePickerDialog 中的日期初始化为今天的日期以外的日期。代码可以找到 here。我使用了他的解决方案并让它发挥作用。

【讨论】:

    【解决方案2】:

    请删除

    setCancelable(false);
    

    并设置这一行而不是上面的行:

    setCanceledOnTouchOutside(false);
    

    【讨论】:

    • 我删除了 setCancelable(false);但它仍然无法正常工作。
    • 当用户点击取消按钮时,它必须关闭
    【解决方案3】:

    试试这个

    getDialog().dismiss();

    同时删除

    setCancelable(false);

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-07
      相关资源
      最近更新 更多