2012-07-23 126 views
1

我想设置一个日期时间间隔,并且当用户按下结束日期时,绘制一个图表。我的问题是,图表是在开始和结束日期都绘制的。发布多个日期选择器

我试图设置一个布尔变量或一个int来决定何时应绘制图表,但由于我使用“DatePickerFragmet”中的“onDateSet”,我无法修改其参数......我粘贴我的这里的代码,以帮助澄清什么,我试图解释:

在我的主要活动,我有:

startDate.setOnClickListener(new OnClickListener() { 
    public void onClick(View v) { 
    // TODO Auto-generated method stub 
     for (int i=0; i<2; i++){ 
      showDatePickerDialog(v,i); 
     } 
    } 
}); 

public void showDatePickerDialog(View v, int i) { 
    DialogFragment newFragment = new DatePickerFragment(); 
    newFragment.show(getFragmentManager(), "datePicker"); 

} 

然后在一个新的类我叫onDateSet:

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

public void onDateSet(DatePicker view, int year, int month, int day) { 
    // Do something with the date chosen by the user 
    LineGraph lineGraph = new LineGraph(); 
    lineGraph.run(getActivity()); 

} 

...我怎么能画出来Ë图表当最终日期被选择?

回答

0

因为我无法找到一个方法来做到这一点,因为我前面提到的,我已经具有2个按钮(开始和结束)选择的日期,而不是只有一个就吃,并使用循环达到了一个解决方案。 之后,我创建了另一个类,每个按钮调用一个不同的类。

的按钮中的声明和方法 “showStartDatePicker” 和 “showEndDatePicker”:

final Button startDate = (Button)findViewById(R.id.startDate); 
final Button endDate = (Button)findViewById(R.id.endDate); 

public void showStartDatePicker(View v) { 
    DialogFragment newFragment = new StartDatePickerFragment(); 
    newFragment.show(getFragmentManager(), "StartDatePicker"); 
} 

public void showEndDatePicker(View v) { 
    DialogFragment newFragment = new EndDatePickerFragment(); 
    newFragment.show(getFragmentManager(), "EndDatePicker"); 
} 

类 “StartDatePickerFragment”:

public class StartDatePickerFragment 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); 
} 

public void onDateSet(DatePicker view, int year, int month, int day) { 
    // Do something with the date chosen by the user 

    Toast.makeText(getActivity(), "Fecha seleccionada: " + day + "/" + (month+1) + "/" + year, Toast.LENGTH_SHORT).show(); 
} 
} 

类 “EndDatePickerFragment”:

public class EndDatePickerFragment 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); 
} 

public void onDateSet(DatePicker view, int year, int month, int day) { 

    LineGraph lineGraph = new LineGraph(); 
    lineGraph.run(getActivity()); 
} 
} 

我几乎做了两次相同的事情(创建DatePicker),但我无法fi找到更有效的方法。

3

写基于newFragment.show();

通过标签一个的if..else或switch语句在这里,你将不得不分开来写的每一个日期选取一个showDatePickerDialog()方法,以便各自持有不同的标签。 我已经实施它如下:

public void showDeadlineDatePickerDialog(View v) { 
    DialogFragment newFragment = new DatePickerFragment(); 
    newFragment.show(getSupportFragmentManager(), "deadlineDate"); 
} 

public void onDateSet(DatePicker view, int year, int month, int day) { 
    StringBuilder task = new StringBuilder(); 
    task.append(day); 
    task.append("."); 
    task.append(month+1); 
    task.append("."); 
    task.append(year); 
    String x=task.toString(); 
    if (getTag()=="deadlineDate") 
     { 

      btn=(Button) getActivity().findViewById(R.id.btn_deadline_date); 
      btn.setText(x); 


     } 
    if (getTag()=="reminderDate") 
    { 
     btn=(Button) getActivity().findViewById(R.id.btn_reminder_date); 
     btn.setText(x); 

    } 
} 
+0

Thanks!我已经使用2个不同的类来解决这个问题,如下所示,一个用于开始日期,另一个用于结束日期。但我发现你的解决方案更有效率。谢谢。 此外,我决定摆脱“for”循环,而是有2个按钮。 – sojeda 2012-07-30 11:55:08

+0

我认为@Palak Bheda应该使用'getTag()。equals(“deadlineDate”)'而不是在if语句中使用'=='。 – dumbfingers 2013-02-20 16:53:19

+0

在onDateSet()下没有名为getTag()的方法。你可以看一下吗? – Khobaib 2014-02-20 02:50:13

相关问题