Creo un'Activity mediante il wizard di Eclipse, e questa mi viene aggiunta nel Manifest:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.idea"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk
android:minSdkVersion="18"
android:targetSdkVersion="23" />
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name=".MainActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:name=".Seconda"
android:label="@string/title_activity_seconda" >
</activity>
</application>
</manifest>
Aggiungo a questa nuova Activity un intent-filter.
<activity
android:name=".Seconda"
android:label="@string/title_activity_seconda" >
<intent-filter>
<action android:name="android.intent.action.Seconda" />
</intent-filter>
</activity>
E ora provo a chiamarla con un Intent esplicito...
Intent intent=new Intent(this, Seconda.class); startActivity(intent);E funziona, passando a mostrarmi l'activity Seconda.
Adesso non metto il Context e la classe di destinazione come parametri del costruttore dell'Intent, ma li setto usando il metodo setClass della classe Intent:
Intent intent=new Intent(); intent.setClass(this, Seconda.class); startActivity(intent);e vediamo...
Funziona ancora.
Ora provo a usare setComponent:
Intent intent=new Intent(); ComponentName component=new ComponentName(this, Seconda.class); intent.setComponent(component); startActivity(intent);Praticamente il parametro di setComponent è esattamente lo stesso di quello di setClass, che poi sarebbe anche lo stesso del costruttore di Intent.
Invece, usando setClassName...
Intent intent=new Intent(); intent.setClassName("com.example.idea","com.example.idea.Seconda"); startActivity(intent);...che funziona lo stesso!
E' il caso di mettere ordine in questi concetti.
Ipotizzo in una specie di pseudocodice la classe Intent:
class Intent{ public Intent(Context context, Class class){ } public setClass(Context context, Class class){ } public setComponent(ComponentName componentName){ } public setClassName(String packageName, String className)} }Questo costruttore e questi metodi del costruttore chiamano la classe in modo esplicito.
E almeno questo lo abbiamo capito... finora.
In questo uso dell'Intent non si parla di action e di category, ma si fa solo riferimento al package e alla classe.
Ma... si può chiamare un'activity usando l'action invece del nome di questa?
Nessun commento:
Posta un commento