java - 如何使用 datepicker dialogdragment 不同的 edittext

标签 java android

我有从 DialogFragment 扩展的 DatepickerFragment。在我的主要 fragment 中有两个编辑文本。第一个用于开始日期,第二个用于完成日期。这些用于一些用户操作。用户首先点击 edittext 选择日期,另一个是相同的方式但是我对如何处理 DatepickerFragment 上的 edittexts 感到困惑。最好的方法是什么?

    etOverFlowingStaringDate.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {

            FragmentManager fragmentManager = getActivity().getFragmentManager();
            DatePickerFragment datePickerFragment = new DatePickerFragment();
            datePickerFragment.show(fragmentManager, "datepicker");
        }
    });

DatepickerFragment.java

public class DatePickerFragment extends DialogFragment implements DatePickerDialog.OnDateSetListener {

    @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);

        // Create a new instance of DatePickerDialog and return it
        return new DatePickerDialog(getActivity(), this, year, month, day);
    }

    @Override
    public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) {
        populateSetDate(year, monthOfYear+1, dayOfMonth);
    }

    private void populateSetDate(int year, int month, int dayOfMonth) {

       String datetime = dayOfMonth + "/" + month + "/" + year ;

        //EditText edtext = (EditText)getView().findViewById(R.id.overflow_starting_date);
        // The edittext is changable it is not a good way to define in here

    }
}

最佳答案

我通常在单独的类中创建自定义 DatePickerFragment,然后使用 Listener 模型来实现您想要实现的目标。本质上:

在你的 DatePickerFragment 中,定义一个接口(interface) -

public interface OnDateChosenListener {
    void onDateChosen(int year, int month, int day);
}

然后,在 DatePickerFragment 类中为该接口(interface)定义一个私有(private)变量 -

public class DatePickerFragment extends DialogFragment implements DatePickerDialog.OnDateSetListener {
    private OnDateChosenListener mOnDateChosenListener = null;

    ...

添加一个函数来设置一个 OnDateChosenListener -

public void setOnDateChosenListener(OnDateChosenListener listener) {
    mOnDateChosenListener = listener;
}

DatePickerFragment 类的最后一件事,将事件和值传递给监听器(如果存在)-

@Override
public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) {
    if (mOnDateChosenListener != null) {
        mOnDateChosenListener.onDateChosen(year, monthOfYear, dayOfMonth);
    }
}

最后,最重要的。请记住在您使用新的 DatePickerFragment 的任何地方添加一个监听器,在您的情况下,一个 Activity -

FragmentManager fragmentManager = getActivity().getFragmentManager();
DatePickerFragment datePickerFragment = new DatePickerFragment();
datePickerFragment.addOnDateChosenListener(new OnDateChosenListener() {
    public void onDateChosen(int year, int month, int day) {
        // use values to change EditText value
    }
}
datePickerFragment.show(fragmentManager, "datepicker");

Listener 模型是一个很好的实践,在 Android 框架中被广泛使用。

关于java - 如何使用 datepicker dialogdragment 不同的 edittext,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37125397/

相关文章:

java - 以秒为单位计时某件事需要多长时间

android - 设置另一个 Activity 的 TextView 但未初始化

android - 处理 Android 屏幕方向

android - 移动 SDK 中的 oauth 2 实现

java.lang.IllegalStateException : Couldn't create Engine

java - 如何使用带有 Twitter Streaming API 的 Spring social 获取基于位置的推文?

java - TestNG:如何将 IConfigurationListener2.beforeConfiguration ITestResult 链接到 ITestListener.onTestStart

java - Eclipse 将无法启动

java - 我可以使用 Gson 来序列化方法本地类和匿名类吗?

android - Android Studio:Gradle同步失败:无法HEAD '…'。从服务器收到状态码502:错误的网关