2016-03-26 6 views
0

Ana Etkinliğim içinde arayacağım ayrı bir tarih aralığı sınıfım var. i yapmak istiyorsunuz neBir tarih seçildikten sonra yöntem çağırma seçilidir

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

kullanıcı kendi tarihini seçilip Tamam preslenmiş sonra seçilen tarih SharedPreferences kendisine atanmış bir dize varsa, kontrol etmektir. Benim MainActivity içine bunun için bir yöntem oluşturduk:

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

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

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

tarih dizesi i DatePicker gelen var biridir.

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

Ama hata "Non-statik yöntem statik bağlamdan başvurulan edilemez" alıyorum: Ben DateDialog sınıf içinde gelen bu aramaya çalışıyorum. Eğer başka nasıl yapabilirim, checkDours() DateDialog içinden kullanmanın bir yolu var mı?

DateDialog sınıfı:

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

ihtiyaçları 'Activity' örneği için bir referans kullanmak 'onDateSet' yöntem ile

MainActivity.checkHours(); 

değiştirin. Lütfen bu yöntemi içeren sınıf için kod ekleyebilirsiniz. –

+0

Üzgünüz, bununla ne demek istediğinden emin değilim? – Masy

+0

Mümkünse 'DateDialog' sınıfının kodunu ekleyebilir misiniz? –

cevap

1

MainActivity örneğinde checkHours yöntemini çağırmanız gerekir. Bir örnek, getActivity() (bu sınıf Fragment uzatıldıkça) ve MainActivity için yayınlama yoluyla alabilirsiniz. (Fragment'un MainActivity ile ilişkili olduğunu varsayarak).

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

Tam olarak ne istedim, teşekkürler! – Masy

+0

Sorun değil. Ne yapması gerektiğini (yaşları hiç kullanmamıştım) gerçekleştirmek için yaşlar aldı ama yardımcı olabildiğime sevindim. –

0

Kişisel DateDialog sınıf tarih bilindiği zaman geri çağırmak için kesin aktivite referans bir tutmak ya ihtiyacı var yoksa bazı arayüz alması gereken Uygulayabileceği nesne, daha sonra uygulamaya geçecek ve Faaliyette değişiklikler yapacaktır.

Böyle bir şey için bir arabirimin özetini kullanmak genellikle daha iyidir.