选择日期后调用方法

时间:2016-03-26 22:47:19

标签: java android datepicker

我有一个单独的datepicker类,我从我的MainActivity中调用。

public void showDateDialog(View v){
        DateDialog dialog= new DateDialog(findViewById(R.id.textView));
        FragmentTransaction ft=getFragmentManager().beginTransaction();
        dialog.show(ft, "DatePicker");

我想要做的是,在用户选择了他们的日期并按下确定之后,检查所选日期是否在SharedPreferences中为其分配了一个字符串。我在MainActivity中创建了一个方法:

public void checkHours(){
    SharedPreferences sharedPref = getSharedPreferences("savedHours", Context.MODE_PRIVATE);

    String date = textView.getText().toString();

    if (sharedPref.contains(date)) {
        textView2.setText(sharedPref.getString(date, ""));
    }
}

日期字符串是我从DatePicker获得的日期字符串。我试图从我的DateDialog类中调用它:

 public void onDateSet (DatePicker view, int year, int month, int day){
        String date=year+"-"+month+"-"+day;
        textView.setText(date);
    MainActivity.checkHours();
}

但我收到错误“无法从静态上下文引用非静态方法”。有没有办法可以在DateDialog里面使用checkHours(),如果没有,我怎么办呢?

DateDialog类:

public class DateDialog extends DialogFragment implements DatePickerDialog.OnDateSetListener  {

TextView textView;
TextView textView2;
public DateDialog(View view){
    textView=(TextView)view;
}

public Dialog onCreateDialog(Bundle savedInstanceState){
    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);
    return new DatePickerDialog(getActivity(),this,year,month,day);
}
public void onDateSet (DatePicker view, int year, int month, int day){
        String date=year+"-"+month+"-"+day;
        textView.setText(date);
    MainActivity.checkHours();
}

}

2 个答案:

答案 0 :(得分:1)

您需要在checkHours的实例上调用方法MainActivity。您可以通过调用getActivity()(此类扩展Fragment)并转换为MainActivity来获取实例。 (我假设FragmentMainActivity相关联。)

替换

MainActivity.checkHours();

((MainActivity) getActivity()).checkHours();

答案 1 :(得分:0)

您的DateDialog类需要获取确切的活动引用以在日期已知时回调,或者需要接收它可以调用的某个接口对象,然后其实现将进行更改活动。

对于像这样的东西,使用接口的抽象通常会更好。