2016-07-15 7 views
-3

Ich beginne andere Aktivitäten mit Absicht von MainActivity.Wie starte ich eine andere Aktivität, während ich den Kontext von mainActivity übergebe?

Hier ist mein Code:

Intent intent = new Intent(this, ProgramClass.class); 
startActivity(intent); 

Jetzt habe ich string.xml Datei in ProgramClass aber getResources(), getApplicationContext(), getContext() sind nicht in der Lage, um mich zugreifen möchten, dass string string.xml-Datei definiert.

Da es einen Fehler generiert, ist die mögliche Lösung, die ich habe, einen Konstruktor zu erstellen & übergeben Sie Kontext zu ProgramClass von MainActivity().

aber dafür muss ich ein Objekt der ProgramClass in MainActivity erstellen, während eine explizite Intent, die .class-Parameter verwendet. Wie kann ich eine Absicht oder eine andere Aktivität starten, indem ich den Kontext von MainActivity übergebe?

+0

Bitte aktualisieren Sie Ihre 'code' und' logcat' es ausreichend detailliert, um eine Frage zu stellen –

+0

Ihre ProgramClass Code –

+0

Alle 'Activity' veröffentlichen oder' Die Anwendungsklasse ** ist ** ein "Kontext". Sie brauchen die MainActivity nicht speziell, Sie brauchen nur einen 'Context' –

Antwort

0
.... 

NewActivity.setParams(context); 
Intent i = .......... 

in NewActivity:

private static Context c; 
public static void setParams(Context c){ 
    this.c = c; 
} 

Dies ist eine leichte Abhilfe, weil es statische Methoden verwendet. Dies ist jedoch von überall zugänglich, so dass jede Aktivität den Kontext ändern kann.

ÜBER DIE ABSICHT

Intent ist Android native Art und Weise von einer Aktivität zur anderen zu wechseln. Diese ändern in der Ziel-/Startpunktklasse nichts. Sie auslösen jedoch den nächsten Schritt im Aktivitätslebenszyklus:

Es gibt keine Möglichkeit, den Kontext zu der Zielaktivität mit Absicht zu übergeben. Sie können jedoch den Kontext, Ganzzahlen, Boolesche Zeichenfolgen, Strings, Instanzen usw. mit einer statischen Methode übergeben, wie oben gezeigt. Es funktioniert solange Sie nicht ändern Sie den Kontext von der NewActivity-Klasse.

Außerdem möchte ich hinzufügen, dass alle Klassen, die Aktivität, Anwendung, AppCompatActivity usw. erweitern, Kontexte sind. Wenn Sie den Kontext irgendwo verwenden müssen, sollten Sie ihn an eine Klasse ohne nativen Kontext übergeben. Wenn Sie Aktivitäten für die Hauptlogik verwenden möchten, versuchen Sie etwas, das Kontext erfordert, und schreiben Sie einfach this.

0

Ich beginne andere Aktivität mit Absicht von MainActivity. Hier ist mein Code:

Intent intent = new Intent(this, ProgramClass.class); 
startActivity(intent); 

In Ordnung, das ist toll, aber das wird nicht funktionieren, wenn ProgramClass nicht eine Variante von Activity verlängern. Und wenn es so ist, dann sollten Sie Zugang zu jeder dieser Methoden haben, die Sie erwähnten.

+0

ProgramClass erweitert AppCompatActivity. Ich denke, das ist genug, um getResources() usw. – jot

+0

Es ist, ja. Also, was ist das Problem? Du solltest ein [mcve] zeigen –

0

Ein hack wäre, dass Sie eine statische Variable in Ihrer Aktivitätsklasse definieren und diese in der onCreate-Methode initialisieren und später in Ihrer anderen Klasse verwenden.

public static Context context = null; 

@Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     context = this; 
    } 

und dann in der anderen Klasse verwenden:

MainActivity.context.getResources().getString();