2016-04-13 4 views
0

Für jede Aktivität definiert zuzugreifen, die einen logischen Elternteil wir die übergeordnete Aktivität im Manifest definiert wie folgt:, wie die Klasse der Aktivität in parentActivityName

<activity 
     android:name=".ui.activity.MyActivity" 
     android:label="@string/activity_title" 
     android:parentActivityName=".ui.activity.ParentActivity" 
     android:theme="@style/My.Theme" > 
     <meta-data 
      android:name="android.support.PARENT_ACTIVITY" 
      android:value=".ui.activity.ParentActivity" /> 
</activity> 

Gibt es eine Möglichkeit, die Klasse für den Zugriff verwiesen entweder @parentActivityName oder [email protected] in MyActivity? (Bitte beachten Sie, dass ich nicht auf die übergeordnete Activity-Instanz, nur die Klasse zugreifen möchte)

Der Grund ist, dass wir für Tracking-Zwecke einen Pfad-wie Zeichenfolge für jede Aktivität generieren möchten. In diesem Fall wäre dieser String /parent_activity/my_activity - und da die Hierarchie bereits im Manifest definiert ist, wäre der beste Fall, dort auf ihn zuzugreifen, um ihn dann zweimal zu definieren.

Vielen Dank für Ihre Hilfe!

Antwort

1

Vielleicht hilft es Ihnen NavUtils.getParentActivityName(childActivityInstance)

+0

Ja, das hat geholfen, danke! Ich kann diese Methode jedoch nicht direkt verwenden, da childActivity ein Objekt und keine Klasse ist (und daher nicht für Hierarchien funktionieren würde, die tiefer als zwei Ebenen sind). ABER ich werde versuchen, [die alte Implementierung dieser Methode] zu verwenden (https://android.googlesource.com/platform/frameworks/support/+/c9cf2eb0a9b6694d0fda3dbc313844955db60820/v4/java/android/support/v4/app/NavUtils.java # 182) als Referenz, um rekursiv durch die Hierarchie zu gehen, basierend auf dem Namen der Klasse/Komponente. Versuche es und melde mich zurück. – marcorei

+0

Das hat den Job gemacht. Ich habe 'NavUtils.getParentActivityName (Context, ComponentName)' 'verwendet und den' ComponentName' mit dem App-Kontext und dem Klassennamen erstellt. – marcorei

0

Sie immer mit den einfachen Weg gehen könnte: Übergeben Sie die übergeordnete Aktivität Namen in der Absicht Extras wie string, in Parent

Intent intent = new Intent(ParentActivity.this, ChildActivity.class); 
intent.putExtra("parent_activity_name", "ParentActivity"); 
... 
startActivity(intent); 

Und dann bekommen in der ChildActivity Aktivität

Intent intent = getIntent(); 
String parentName = intent.getStringExtra("parent_activity_name"); 

Nicht sicher wenn es irgendeine andere elegantere Lösung gibt.

+0

Vielen Dank für Ihre Antwort! Das Problem bei diesem Ansatz besteht darin, dass dies die übergeordnete Aktivität aus dem Aktivitätsstapel ist und nicht das übergeordnete Element in der Aktivitätshierarchie, wie sie im Manifest definiert ist, oder? (Ich weiß, dass ich einfach die Informationen über den Manifest-Elternteil in jeder Aktivität fest codieren kann, das bedeutet nur, dass ich diese Informationen zweimal definieren muss [im Manifest und dann wieder in jeder Aktivität]). – marcorei

Verwandte Themen