Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/184.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 使用单个侦听器多次调用DatePicker_Android_Datepicker - Fatal编程技术网

Android 使用单个侦听器多次调用DatePicker

Android 使用单个侦听器多次调用DatePicker,android,datepicker,Android,Datepicker,我有相同格式的日期和时间字段。所以我需要为这些字段设置四个日期和时间选择器。目前,我可以得到,但所有字段都显示相同的时间和日期,所有字段都是在我从第一个选择器选择时间和日期时设置的 我使用了几种方法,一些是检查每个字段的视图id,给对话框提供id,以及在onCreateDialog方法中使用switch等。。但对我来说什么都不管用。请建议我如何才能做到这一点 我的日期选择器代码: public void showDatePicker() { DatePickerFragment

我有相同格式的日期和时间字段。所以我需要为这些字段设置四个日期和时间选择器。目前,我可以得到,但所有字段都显示相同的时间和日期,所有字段都是在我从第一个选择器选择时间和日期时设置的

我使用了几种方法,一些是检查每个字段的视图id,给对话框提供id,以及在onCreateDialog方法中使用switch等。。但对我来说什么都不管用。请建议我如何才能做到这一点

我的日期选择器代码:

 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方法调用picker方法:

公共作废日期选择器(视图){

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

更新: 在DialogFragment中创建一个接口,并在其中放置一个抽象方法,该方法将在其参数中以字符串形式保存日期。然后在主活动中实现该接口,并在活动中实现overide 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);

    }
}
更新: 在DialogFragment中创建一个接口,并在其中放置一个抽象方法,该方法将在其参数中以字符串形式保存日期。然后在主活动中实现该接口,并在活动中实现overide 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);

    }
}
更新: 在DialogFragment中创建一个接口,并在其中放置一个抽象方法,该方法将在其参数中以字符串形式保存日期。然后在主活动中实现该接口,并在活动中实现overide 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);

    }
}
更新: 在DialogFragment中创建一个接口,并在其中放置一个抽象方法,该方法将在其参数中以字符串形式保存日期。然后在主活动中实现该接口,并在活动中实现overide 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的实例你想要选择日期的y地点是的,我试过了。当时我得到的是一个空白的白色框,而不是选择器。我会检查并让你知道。我会执行此操作并告诉你。抱歉。不理解第二部分。“将日期设置为字符串”。请详细说明。不获取。我可以在我的应用程序中显示日期选择器。我有4个字段在表单中使用日期选择器。我需要在每个字段上设置不同的日期。我该怎么做?当您要在不同的位置设置日期时,您必须多次打开对话框,这意味着您必须始终创建dialogFragment的实例你想要选择日期的y地点是的,我试过了。当时我得到的是一个空白的白色框,而不是选择器。我会检查并让你知道。我会执行此操作并告诉你。抱歉。不理解第二部分。“将日期设置为字符串”。请详细说明。不获取。我可以在我的应用程序中显示日期选择器。我有4个字段在表单中使用日期选择器。我需要在每个字段上设置不同的日期。我该怎么做?当您要在不同的位置设置日期时,您必须多次打开对话框,这意味着您必须始终创建dialogFragment的实例你想要选择日期的y地点是的,我试过了。当时我得到的是一个空白的白色框,而不是选择器。我会检查并让你知道。我会执行此操作并告诉你。抱歉。不理解第二部分。“将日期设置为字符串”。请详细说明。不获取。我可以在我的应用程序中显示日期选择器。我有4个字段在表单中使用日期选择器。我需要在每个字段上设置不同的日期。我该怎么做?当您要在不同的位置设置日期时,您必须多次打开对话框,这意味着您必须始终创建dialogFragment的实例y您想要选择日期的地方是的,我试过了。当时我得到的是一个空白的白色框,而不是选择器。我会检查并让您知道。我会执行此操作并告诉您。