2013-12-09 4 views
33

Ho memorizzato alcuni dati in una classe globale utilizzando il contesto dell'applicazione in un'attività. Più tardi devo recuperare quei valori in Un frammento. Ho fatto qualcosa di simile per l'archiviazione in Global Class.Ottieni il contesto dell'applicazione frammentato in Android?

AndroidGlobalClass AGC = ((AndroidGlobalClass) getApplicationContext()); 
AGC.setUser_access("XYZ"); 
AGC.setFirst_name("ABC"); 

E nel manifesto che ho fatto:

<application 
    android:name=".AndroidGlobalClass" 
    android:theme="@style/AppTheme" > 
    <activity 
     android:name="abc.SignInActivity" 
     android:label="@string/app_name" > 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 
      <category android:name="android.intent.category.LAUNCHER" /> 
     </intent-filter> 
    </activity> 
</application> 

Ora Quando sto cercando di ottenere il contesto applicativo Usando questo ... io non sto ottenendo il contesto ...

AndroidGlobalClass AGC = ((AndroidGlobalClass) getApplicationContext()); 

Questo è il mio Frammento Attività

public class Fragment_NewsFeed extends Fragment { 
    public Fragment_NewsFeed() { 
    } 

    RestImplimentationMethods RIM; 
    AndroidGlobalClass AGC; 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
      Bundle savedInstanceState) { 
     View rootView = inflater.inflate(R.layout.fragment_newsfeed, container, false); 
     return rootView; 
    } 
} 
+7

Stai attento a chiedere aiuto "APPENA POSSIBILE". Spaventi chiunque voglia darti una bella risposta completa. Come hai visto, finisci con una serie di risposte che non aiutano veramente. – tir38

+0

o usare 'isAdded()' per verificare se il frammento meteo è collegato all'attività o meno e se è collegato a u sarà in grado di ottenere 'getActivity(). GetApplicationContext()' :). in questo modo si assicura, non si ottiene mai errore NPE e l'app non si bloccherà –

risposta

122

È possibile ottenere il contesto mediante getActivity().getApplicationContext();

+26

Attenzione dove stai chiamando questo, come 'getActivity()' restituirà null se il frammento è stato staccato – gunar

+0

Grazie funziona .... –

+2

Creare un contesto di applicazione statico nella classe Application e assegnarlo a onCreate(): MyApplication.sContext = getApplicationContext(); Quindi puoi accedervi da qualsiasi attività senza preoccuparti del distacco dei frammenti. – Eduard

4

Prova ad usare getActivity(); Questo risolverà il tuo problema.

+0

Si può annotare in modo specifico il codice come ottenere il contesto dell'applicazione per il mio codice .. Sto riscontrando problemi con il codice – NRahman

+0

getActivity(). getApplicationContext(); Sarà .. Thanx – NRahman

+0

AndroidGlobalClass AGC = nuovo AndroidGlobalClass (getActivity()); –

13

Usa

getActivity(). GetApplicationContext()

per ottenere il contesto in qualsiasi frammento

+1

Attenzione, questo funziona solo se il frammento è attualmente collegato a un'attività! –

4

è possibile definire una variabile globale:

private Context globalContext = null; 

e nel metodo onCreate, inizializzarlo:

globalContext = this.getActivity(); 

E con questo è possibile utilizzare la variabile "globalContext" in tutte le funzioni di frammento/metodi.

Buona fortuna.

2

Aggiungi questo al onCreate

// Getting application context 
     Context context = getActivity(); 
+0

Questo non è il contesto dell'applicazione! L'utilizzo di questo contesto con frammenti conservati durante la ricreazione delle attività porterà a perdite di memoria! –

3

Quando nel frammento, si può sempre ignorare

void onAttach (Context context) { 
    this.context = context; 
} 

Questo metodo viene sempre chiamato per un frammento di supporto - android.support.v4.app.Fragment e si può essere sicuri che la corretta propria attività il contesto sarà impostato.