【问题标题】:DatePicker in Fragment Android didn't showFragment Android 中的 DatePicker 未显示
【发布时间】:2018-06-14 18:03:22
【问题描述】:

我在片段中的代码:

public class DatepickerFragment extends Fragment {
TextView etDate;
static final int DATE_ID = 0;
Calendar C = Calendar.getInstance();
private int mYearIni, mMonthIni, mDayIni, sYearIni, sMonthIni, sDayIni;
private DatePickerDialog.OnDateSetListener mDateSetListener = new DatePickerDialog.OnDateSetListener() {
    @Override
    public void onDateSet(DatePicker view, int year, int month, int dayOfMonth) {
        mYearIni = year;
        mMonthIni = month;
        mDayIni = dayOfMonth;
        etDate.setText(mDayIni + "-" + (mMonthIni + 1) + "-" + mYearIni + " ");
    }
};

 protected Dialog onCreateDialog(int id) {
    switch (id) {
        case DATE_ID:
            return new DatePickerDialog(getContext(), mDateSetListener, sYearIni, sMonthIni, sDayIni);
    }
    return null;
}

    @Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    View rootView = inflater.inflate(R.layout.fragment_datepicker, container, false);
    etDate= rootView.findViewById(R.id.etDate);

    sMonthIni = C.get(Calendar.MONTH);
    sDayIni = C.get(Calendar.DAY_OF_MONTH);
    sYearIni = C.get(Calendar.YEAR);

    etDate.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            getActivity().showDialog(DATE_ID);
        }
    });
    return rootView;
}

我正在尝试使用此代码进行活动,然后成功,但我尝试在 Fragment datepicker 中未显示。我的片段在滑块 viewpager 中,我尝试使用片段对话框,但 viewpager 适配器出错。

如何在 Fragment 中显示 DatePicker?

【问题讨论】:

  • 您不能同时覆盖onCreateViewonCreateDialog。如果你想从你的片段中显示一个对话框,你需要另一个片段,一个 DialogFragment。
  • 避免在 onCreateView 方法中设置点击监听器等。在 onViewCreated 方法中这样做

标签: android android-fragments android-dialog android-datepicker


【解决方案1】:

让你的片段实现到 DatePickerDialog.OnDateSetListener

为当前日期创建日历实例

创建 DatePicker 对话框并显示

public class YourFragment extends Fragment implements android.app.DatePickerDialog.OnDateSetListener {

/**
 * Create new fragment.
 */
public static YourFragment ofNew() {
    YourFragment fragment = new YourFragment();
    return fragment;
}

@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, Bundle savedInstanceState) {
    ViewGroup rootView = (ViewGroup) inflater.inflate(R.layout.layout_fragment, container, false);
    Button button = rootView.findViewById(R.id.show);
    button.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            showAndroidPicker();
        }

        ;
    });
    return rootView;
}

private void showAndroidPicker() {
    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);
    DatePickerDialog datePickerDialog = new DatePickerDialog(getActivity(),
            this, year, month, day);
    datePickerDialog.show();
}

@Override
public void onDateSet(DatePicker datePicker, int i, int i1, int i2) {

}
}

【讨论】:

  • 您的代码错误,错误结果是“类 'DatepickerFragment' 必须声明为抽象或在 'OnDateSetListener' 中实现抽象方法 'onDateSet(DatePicker, int, int, int)'”..请帮帮我
  • 你是否让你的片段类实现监听器 onDatesetlistener ?
  • 是的,我在我的实现片段中制作了 onDatesetlistener
  • 好的,让我再检查一下
  • 是的..我希望你成功..你通知我:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-14
  • 2020-04-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多