2016-03-26 9 views
0

私はMainActivityの中から呼び出す別のdatepickerクラスを持っています。私がやりたい何日付の後にメソッドを呼び出す

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

は、ユーザーが自分の日付を選択し、[OK]を押した後、選択した日付が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(); 
} 

しかし、私はエラー「非静的メソッドがstaticコンテキストから参照することはできません」取得しています。私は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(); 
} 

}

+1

ニーズが 'Activity'インスタンスへの参照を使用し' onDateSet'方法で

MainActivity.checkHours(); 

を交換します。このメソッドを含むクラスのコードを含めることができますか? –

+0

申し訳ありませんが、あなたはそれが何を意味するかわかりません? – Masy

+0

可能であれば、 'DateDialog'クラスのコードを含めることができますか? –

答えて

1

MainActivityのインスタンスでcheckHoursメソッドを呼び出す必要があります。 getActivity()(このクラスはFragmentに拡張されるため)を呼び出し、キャストするとMainActivityにインスタンスを取得できます。 (私はFragmentMainActivityに関連付けられていると仮定しています)。

((MainActivity) getActivity()).checkHours(); 
+0

まさに私が欲しかったこと、ありがとう! – Masy

+0

問題ありません。何をすべきかを理解するのは時代がかかりました(私はフラグメントを使用したことはありません)が、私は助けることができてうれしいです。 –

0

あなたDateDialogクラスは、日付が知られている、またはそれはいくつかのインタフェースを受信する必要があるときにコールバックする正確なアクティビティの参照を手に入れるためにどちらかの必要がありますそのオブジェクトが呼び出すことができるオブジェクトであり、そのオブジェクトの実装ではアクティビティが変更されます。

通常、このようなものに対してインターフェイスの抽象化を使用する方が良いです。

関連する問題