【问题标题】:Calling DatePicker multiple times using single listener使用单个侦听器多次调用 DatePicker
【发布时间】:2015-03-05 05:10:53
【问题描述】:

我有相同形式的日期和时间字段。所以我需要为这些字段设置四个日期和时间选择器。目前我能够得到它,但所有字段都显示相同的时间和日期,并且当我从第一个选择器中选择时间和日期时,所有字段都已设置。

我使用了几种方法,一些是检查每个字段的视图 ID,为对话框提供 ID,并在 onCreateDialog 方法中使用 switch 等。但对我来说没有任何效果。请建议我如何实现这一目标。

我的 DatePicker 代码:

 public void showDatePicker() {
        DatePickerFragment date1 = new DatePickerFragment();
    /**
     * Set Up Current Date Into dialog
     */
    Calendar calender = Calendar.getInstance();
    Bundle args = new Bundle();
    args.putInt("year", calender.get(Calendar.YEAR));
    args.putInt("month", calender.get(Calendar.MONTH));
    args.putInt("day", calender.get(Calendar.DAY_OF_MONTH));
    date1.setArguments(args);

    /**
     * Set Call back to capture selected date
     */
    date1.setCallBack(ondate);
    date1.show(getSupportFragmentManager(), "Date Picker");



}




    DatePickerDialog.OnDateSetListener ondate =  new DatePickerDialog.OnDateSetListener() {

    public void onDateSet(DatePicker view, int year, int monthOfYear,
                          int dayOfMonth) {




            date.setText(String.valueOf(dayOfMonth) + "-" + String.valueOf(monthOfYear + 1)
                    + "-" + String.valueOf(year));

            dateValue = date.getText().toString();

            est_compDate.setText(String.valueOf(dayOfMonth) + "-" + String.valueOf(monthOfYear + 1)
                    + "-" + String.valueOf(year));

            estValue = est_compDate.getText().toString();


            act_compDate.setText(String.valueOf(dayOfMonth) + "-" + String.valueOf(monthOfYear + 1)
                    + "-" + String.valueOf(year));

            actValue = act_compDate.getText().toString();



            notify_date.setText(String.valueOf(dayOfMonth) + "-" + String.valueOf(monthOfYear + 1)
                    + "-" + String.valueOf(year));

            notifyValue = notify_date.getText().toString();



    }
};

我的 DatePickerFragment 代码:

public class DatePickerFragment extends DialogFragment {
    DatePickerDialog.OnDateSetListener ondateSet;

public DatePickerFragment() {
}
public void setCallBack(DatePickerDialog.OnDateSetListener ondate) {

    ondateSet = ondate;

}



private int year, month, day;


@Override
public void setArguments(Bundle args) {
    super.setArguments(args);
    year = args.getInt("year");
    month = args.getInt("month");
    day = args.getInt("day");
}

@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {


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


}

}

因此,当我为 date.setText 行选择时间和日期选择器时,其他三个都会同时设置。

我正在使用 onClick 方法调用选择器方法:

public void datePicker(查看视图) {

    showDatePicker();

}

请告诉我可以做什么。如果您需要更多信息,请告诉我。提前致谢。

【问题讨论】:

    标签: android datepicker


    【解决方案1】:

    更新: 在您的 DialogFragment 中创建一个接口并在其中放置一个抽象方法,该方法将在其参数中将您的日期保存在字符串中。然后在您的主要活动中实现此接口并在您的活动中覆盖 DateInString(String) 方法,这将为您在活动中选择日期。然后您可以将其显示在您想要的位置。 我向您展示了一个工作代码,我必须在两个地方设置日期,您可以通过修改活动中的 DateInString(String) 覆盖方法来多次使用它...

    对话框片段:

    public class Date extends android.support.v4.app.DialogFragment implements DatePickerDialog.OnDateSetListener {
    
        DatePickerData datePickerData ;
        String date = null;
        @Override
        public Dialog onCreateDialog(Bundle savedInstanceState) {
            Calendar cal = Calendar.getInstance();
            int year = cal.get(Calendar.YEAR);
            byte month = (byte)cal.get(Calendar.MONTH);
            byte day = (byte ) cal.get(Calendar.DAY_OF_MONTH);
            return new DatePickerDialog(getActivity(),this,year,month,day);
        }
    
    
        @Override
        public void onDateSet(DatePicker datePicker, int selectedYear, int selectedMonth, int selectedDay) {
        Calendar cal = Calendar.getInstance();
            cal.set(selectedYear,selectedMonth,selectedDay);
            SimpleDateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy");
          date = dateFormat.format(cal.getTime());
            passDate(date);
        }
    
        @Override
        public void onAttach(Activity activity) {
            super.onAttach(activity);
            datePickerData = (DatePickerData)activity;
        }
    
        public void passDate(String date){
        datePickerData.DateInString(date);   
        public interface DatePickerData{
            public void DateInString(String date);
        }
    }
    

    和你的活动:

    public class ActMarkAttendance extends FragmentActivity implements Date.DatePickerData{
    private boolean isStartDate = false;
    private TextView startDateTextView;
        private TextView endDateTextView;
     protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_act_view_attendance);
            startDateTextView = (TextView) findViewById(R.id.startDateTextView_attView);
            endDateTextView = (TextView) findViewById(R.id.endDateTextView_attView);
    startDateTextView.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                isStartDate = true;                
                showDateFragment();                  
                }
            });
    
            endDateTextView.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    isStartDate = false;
                   showDateFragment();                    
                }
            });
    }
    private void showDateFragment(){
            Date dateFragment = new Date();
            dateFragment.show(fm,General.NOTHING);
        }
    @Override
        public void DateInString(String date) {
        if (isStartDate)
            startDateViewer.setText(date);
        else
            endDateViewer.setText(date);
    
        }
    }
    

    【讨论】:

    • 对不起。第二部分没看懂。 “将日期设置为字符串”。能否请您详细说明。
    • 没有得到。我可以在我的应用程序中显示日期选择器。我有 4 个字段在表单中使用日期选择器。我需要在每个日期上设置不同的日期,我该怎么做?
    • 当你想在不同的地方设置日期时,你必须多次打开对话框,这意味着你必须在每个你想要选择日期的地方创建 dialogFragment 的实例
    • 是的,我试过了。那时我得到一个空白的白色盒子而不是选择器。会检查并通知您。
    • 将实施并告诉您。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-28
    • 1970-01-01
    • 1970-01-01
    • 2013-04-15
    相关资源
    最近更新 更多