我有一个单独的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();
}
}
答案 0 :(得分:1)
您需要在checkHours
的实例上调用方法MainActivity
。您可以通过调用getActivity()
(此类扩展Fragment
)并转换为MainActivity
来获取实例。 (我假设Fragment
与MainActivity
相关联。)
替换
MainActivity.checkHours();
与
((MainActivity) getActivity()).checkHours();
答案 1 :(得分:0)
您的DateDialog类需要获取确切的活动引用以在日期已知时回调,或者需要接收它可以调用的某个接口对象,然后其实现将进行更改活动。
对于像这样的东西,使用接口的抽象通常会更好。