2016-03-26 8 views
0

Ich habe eine separate Datepicker-Klasse, die ich von innerhalb meiner MainActivity aufrufen.Aufruf einer Methode nach einem Datum ist ausgewählt

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

Was Sie mag würde zu tun ist, um, nachdem der Benutzer ihr Datum gewählt und gedrückt ok, prüfen Sie, ob das ausgewählte Datum eine Zeichenfolge in SharedPreferences zugewiesen hat. Ich habe eine Methode dafür in meinem MainActivity erstellt:

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

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

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

Das Datum Zeichenfolge ist die, die ich aus dem Datepicker haben. Ich versuche, dies zu rufen aus meiner DateDialog Klasse:

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

Aber ich bin immer der Fehler „Nicht-statische Methode kann nicht von einem statischen Kontext verwiesen werden“. Gibt es irgendeine Möglichkeit, dass ich checkHours() von DateDialog aus verwenden kann, wenn nicht, wie sonst kann ich es tun?

DateDialog Klasse:

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

Die 'onDateSet' Bedürfnisse Verfahren einen Verweis auf die' Activity' Instanz. Bitte fügen Sie Code für die Klasse mit dieser Methode ein. –

+0

Sorry, ich bin mir nicht sicher, was du damit meinst? – Masy

+0

Wenn möglich, können Sie den Code für die Klasse "DateDialog" hinzufügen? –

Antwort

1

Sie müssen die Methode checkHours für eine Instanz von MainActivity aufrufen. Sie können eine Instanz durch Aufrufen von getActivity() (da diese Klasse Fragment erweitert) und Casting zu MainActivity abrufen. (Ich gehe davon aus, dass die Fragment mit MainActivity verbunden ist).

Ersetzen

MainActivity.checkHours(); 

mit

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

Genau das, was ich wollte, danke! – Masy

+0

Kein Problem. Es dauerte ewig, bis ich erkannte, was zu tun war (ich habe noch nie Fragmente benutzt), aber ich bin froh, dass ich helfen konnte. –

0

Ihre DateDialog Klasse muss entweder ein Halten der genauen Aktivitätsreferenz wieder ins Leben zu rufen, wenn das Datum bekannt ist, oder braucht sie eine Schnittstelle empfangen Objekt, das es aufrufen kann, dessen Implementierung dann gehen und Änderungen in der Aktivität vornehmen wird.

Es ist normalerweise besser, die Abstraktion einer Schnittstelle für solche Sachen zu verwenden.

Verwandte Themen