2013-10-16 1 views

Antwort

28

Führen Sie den Kontext an den Konstruktor der benutzerdefinierten Klasse verwenden und verwenden die gleiche

new CustomClass(ActivityName.this); 

Dann

Context mContext; 
public CustomClass(Context context) 
{ 
    mContext = context; 
} 

den Kontext verwenden

String[] foo_array = mContext.getResources().getStringArray(R.array.foo_array); 

auch halten in mind

Bewahren Sie keine langlebigen Verweise auf eine kontext Aktivität dieses

android getResources() from non-Activity class

http://android-developers.blogspot.in/2009/01/avoiding-memory-leaks.html

Überprüfen Sie auch (ein Verweis auf eine Aktivität sollte die gleiche Lebensdauer wie die Aktivität selbst haben)

Edit:

ändern Sie diese

public class CustomClass(Context context) 
{ 
} 

Um

public class CustomClass 
{ 
    Context mContext; 
    public CustomClass(Context context) // constructor 
    { 
    mContext = context; 
    } 
} 
+0

Wenn ich meine benutzerdefinierte Klasse in 'öffentliche Klasse CustomClass (Kontext Kontext) {}' ändern, gibt es mir Fehler Sprich 'Syntaxfehler auf Token" (", {expected'. –

+1

@JosephWebber müssen Sie einen Konstruktor haben nicht die synxtax der Klassendeklaration zu ändern. Überprüfen Sie die Bearbeitung – Raghunandan

+0

@JosephWebber überprüfen Sie die Bearbeitung sollte es funktionieren und überprüfen Sie auch diese http://docs.oracle.com/javase/tutorial/java/javaOO/constructors.html – Raghunandan

0

Sie müssen den Aktivitätskontext an die benutzerdefinierte Klasse übergeben.

private Context context; 
public CustomClass(Context context) 
{ 
this.context=context; 
} 
6

dies versuchen,

Context context=getApplicationContext(); 
String[] foo_array = context.getResources().getStringArray(R.array.foo_array); 

Und verwenden Aktivität Kontext nicht so, dass in das Aktivitätslebenszyklus gebunden ist.

aktualisieren,

getApplicationContext() ist von Context-Klasse. Das bedeutet, jeder erweiterte Kontext hat diese Methode. Dies bedeutet auch, dass Sie dies von service oder von anderen Ressourcen verwenden können.

Aber, wenn Sie benutzerdefinierte Klasse nicht Activity/Kontext erweitern, müssen Sie Context übergeben als Parameter getApplicationContext()

zu verwenden, wenn Sie Ihre Aktivitäten wie diese

myMethod(Activity activity) //this is bad 

Bud erklären, wenn es heißt, folgende,

myMethod(Context context) //this is ok 

aber von oben Erklärung nicht passieren Activity oder ServiceContext da sie einen eigenen Lebenszyklus haben.stattdessen werden Sie getApplicationContext()

+1

'Context context = getApplicationContext();' gibt dann den Fehler 'Verfahren getApplicationContext() ist nicht definiert für den Typ CustomClass'. –

+0

Warum ist diese 'myMethod (Aktivitätsaktivität)' schlecht? http://developer.android.com/reference/android/content/Context.html. Aktivität ist eine bekannte indirekte Unterklasse von Context. http://stackoverflow.com/questions/7298731/when-to-call-activity-context-or-application-context – Raghunandan

Verwandte Themen