2015-08-12 20 views
7

La classe intenti aveva 6 costruttoriI costruttori Intent parametri

Intent()

Creare un intento vuota.


Intent (o Intent)

costruttore di copia.


Intent (azione String)

Creare un intenti con una determinata azione.


Intent (azione String, Uri uri)

Crea un intenti con una data azione e per un determinato URL di dati.


Intent (Context packageContext, Classe CLS)

Creare un intenti per un componente specifico.


Intent (azione String, Uri uri, Context packageContext, Classe CLS)

Creare un intento per un componente specifico con una determinata azione e dei dati .

Sono quasi nuovo nella programmazione Android e per lo più con il quinto quando ho bisogno di avviare un altro Activity o Fragment:

Intent(Context packageContext, Class<?> cls) 

quando voglio avviare un Activity da un Fragment faccio questo :

Intent i = new Intent(getActivity(), DestinationActivity.class); 

per quanto ne so, getActivity() restituirà un Activity

Ma il costruttore si aspetta un Context, come è possibile ???

è possibile a causa di ciò il Activity restituito da getActivity() implicitamente invoca getApplicationContext() ???

+3

Cerca nei documenti API come viene interrotto Context. È possibile riportare il retro al contesto dall'attività o dall'applicazione o frammento. Ognuno di questi sono anche contesti;) –

risposta

4

Date un'occhiata a l'argomento Context molto da vicino nel quinto dichiarazione di intenti. Riflette il polimorfismo. Lo Intent prende un argomento Context in modo da poter passare qualsiasi oggetto che sia un Context o derivi dalla classe Context.

Attività, AppCompatActivity, IntentService, Servizio tutti derivano dalla classe Context e quindi possono essere passati come argomento al metodo.

1

attività si estende al contesto così puoi semplicemente lanciarlo:

Intent i = new Intent((Context)getActivity(), DestinationActivity.class); 
+0

a @ Marcin Orlowski. Spero che tu possa risolvere il mio problema. Sto creando un intento specifico per un componente. Sto ottenendo una linea rossa ondulata sotto il secondo parametro che è il mio nome di classe di servizio nel seguente codice. Intento wifi_intent = new Intent (Application.Context, WifiMonitoringService.class); Il suo dice "previsto" errore quando metto il mouse su quello. Per favore aiutatemi. Ho postato quella domanda. Puoi trovarlo nel seguente link http://stackoverflow.com/questions/40828123/couldnt-pass-the-service-class-to-the-intent-constructor-intentcontext-class – BabyboBNukes

2

L'attività eredita il contesto. Quindi, se ti trovi in ​​un'attività, devi solo passarsi da solo per usare il contesto. Contiene anche un puntatore a getBaseContext(). Occasionalmente potresti dover fare riferimento a questo, se hai bisogno dell'intero contesto applicativo, ma molto probabilmente non lo farai per un po '.

È possibile trovare ulteriori dettagli sulla classe di attività here.

Questo question sui parametri del costruttore di intento è simile al tuo e ha una risposta davvero buona. Penso che ti piacerebbe dare un'occhiata.

Spero che aiuti.

+0

il link che hai fornito è il mio domanda (questa domanda) –

+0

@hamid_c Siamo spiacenti! Li avevo mescolati. Aggiustato! :) – DanXPrado

Problemi correlati