【问题标题】:Loading Date picker in a fragment from a fragment [duplicate]从片段中加载片段中的日期选择器[重复]
【发布时间】:2019-07-01 12:55:20
【问题描述】:

我有一个小问题,我正在尝试使用片段将日期选择器实现到另一个片段中,但是当我单击按钮加载日期选择器时收到此错误消息,我在日志中收到该错误

java.lang.ClassCastException: com.example.buzzamaid.HomeActivity cannot be cast to android.app.DatePickerDialog$OnDateSetListener
        at com.example.buzzamaid.Fragments.DatePickerFragment.onCreateDialog(DatePickerFragment.java:23)

我假设它试图将它传递给 HomeActivity 而不是我创建的 DateTimeFragment。我该如何解决?

我的日期选择器片段


    @NonNull
    @Override
    public Dialog onCreateDialog(@Nullable Bundle savedInstanceState) {

        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(getContext(),(DatePickerDialog.OnDateSetListener) getContext(), year, month, day);

    }
}

我的日期时间片段



    Unbinder unbinder;

    @BindView(R.id.bt_select_date)
    Button bt_select_date;

    @BindView(R.id.bt_select_time)
    Button bt_select_time;

    @BindView(R.id.tv_selected_date)
    TextView tv_selected_date;

    @BindView(R.id.tv_selected_time)
    TextView tv_selected_time;



    static DateTimeFragement instance;

    public  static DateTimeFragement getInstance() {
        if (instance == null)
            instance = new DateTimeFragement();
        return instance;

    }

    @Nullable
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        super.onCreateView(inflater, container, savedInstanceState);
        View itemView =  inflater.inflate(R.layout.fragment_date_time,container,false);
        unbinder = ButterKnife.bind(this,itemView);

        return itemView;



    }

    @Override
    public void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);




    }


    @OnClick(R.id.bt_select_date)
    public void onClick() {
        DialogFragment datePicker = new DatePickerFragment();
        datePicker.show(getFragmentManager(), "Date Picker");
    }






    @Override
    public void onDateSet(DatePicker view, int year, int month, int dayOfMonth) {
        Calendar c = Calendar.getInstance();
        c.set(Calendar.YEAR, year);
        c.set(Calendar.MONTH, month);
        c.set(Calendar.DAY_OF_MONTH, dayOfMonth);
        String currentDateString = DateFormat.getDateInstance(DateFormat.FULL).format(c.getTime());
        tv_selected_date.setText(currentDateString);
    }
}

当我点击片段中的按钮时,我怎样才能让它显示日历而不是崩溃?

【问题讨论】:

  • 检查文档以获取 DatePickerDialog 构造函数类型的第二个参数...并传递一些实现它的东西

标签: javascript java android android-studio


【解决方案1】:

如果您已将OnDateSetListener 实现为DatePickerFragment,请将DatePickerDialog 实例更改为:

return new DatePickerDialog(getContext(), DatePickerFragment.this , year, month, day);

【讨论】:

    【解决方案2】:

    您的HomeActivity 是否实现DatePickerDialog.OnDateSetListener 接口?如果不是,请确保让您的 HomeActivity 实现 DatePickerDialog.OnDateSetListener。实现这个方法会给你覆盖方法

    @Override
        public void onDateSet(DatePicker view, int year, int month, int dayOfMonth) {
    
        }
    

    您可以根据您的要求覆盖此方法。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-12-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多