Gezinme grafiğinizdeki bir hedef, bir etkinlik olabilir. En iyi seçenek olsa da uygulamanızda tek bir aktivite olması için alıştırma yapın, uygulamalar genellikle ayrı bir etkinlik belirli bileşenler veya ekranlarla ilgili etkinliklerdir. Etkinlik hedeflerin kullanılması yararlı olabilir.
Oluşturma ve Kotlin DSL
Navigasyon grafiğinize bir aktivite hedefi eklemek de
hem Compose'da hem de Kotlin DSL'yi parçalarla kullanırken. Çünkü
NavGraph
öğenizi NavHost
composable'ınıza iletirken aynı
createGraph()
lambda.
Daha fazla bilgi için Kotlin aracını kullanarak programatik olarak grafik oluşturma DSL.
XML
Etkinlik hedefi oluşturmak, parça oluşturmaya benzer. seçeceğiz. Ancak bir aktivite destinasyonunun yapısı yardımcı olur.
Gezinme kitaplığı, NavController
öğesini varsayılan olarak bir
Activity
düzeninde çalışır ve etkin gezinme grafiği,
Activity
. Kullanıcı farklı bir Activity
giderse geçerli
gezinme grafiği artık kapsam dışındadır. Bu, Activity
hedefi, gezinme grafiğinde bir uç nokta olarak kabul edilmelidir.
Bir etkinlik hedefi eklemek için Activity
hedefini
tam sınıf adı:
<?xml version="1.0" encoding="utf-8"?> <navigation xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:id="@+id/navigation_graph" app:startDestination="@id/simpleFragment"> <activity android:id="@+id/sampleActivityDestination" android:name="com.example.android.navigation.activity.DestinationActivity" android:label="@string/sampleActivityTitle" /> </navigation>
Bu XML, aşağıdaki startActivity()
çağrısına eşdeğerdir:
Kotlin
startActivity(Intent(context, DestinationActivity::class.java))
Java
startActivity(new Intent(context, DestinationActivity.class));
Bu yaklaşımın uygun olmadığı durumlarla karşılaşabilirsiniz. Örneğin,
etkinlik sınıfına bir derleme süresi bağımlılığı olmayabilir ya da
örtülü niyetten geçmenin dolaylı düzeyini tercih ederler. İlgili içeriği oluşturmak için kullanılan
Activity
hedefi için manifest girişinde intent-filter
Activity
hedefini nasıl yapılandırmanız gerektiğini belirtir.
Örneğin, aşağıdaki manifest dosyasını ele alalım:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.android.navigation.activity">
<application>
<activity android:name=".DestinationActivity">
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<data
android:host="example.com"
android:scheme="https" />
<category android:name="android.intent.category.BROWSABLE" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>
</application>
</manifest>
İlgili Activity
hedefinin yapılandırılması için
Manifest girişindekilerle eşleşen action
ve data
özellikleri:
<?xml version="1.0" encoding="utf-8"?> <navigation xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:id="@+id/navigation_graph" app:startDestination="@id/simpleFragment"> <activity android:id="@+id/localDestinationActivity" android:label="@string/localActivityTitle" app:action="android.intent.action.VIEW" app:data="https://example.com" app:targetPackage="${applicationId}" /> </navigation>
targetPackage
özelliğinin mevcut applicationId
değerine ayarlanması,
ana uygulamayı da içeren geçerli uygulamanın kapsamını belirler.
Aynı mekanizmayı, belirli bir uygulamanın istediğiniz
bir uygulama olmasını istediğiniz
seçeceğiz. Aşağıdaki örnekte bir hedefin
applicationId
/com.example.android.another.app
<?xml version="1.0" encoding="utf-8"?> <navigation xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:id="@+id/navigation_graph" app:startDestination="@id/simpleFragment"> <activity android:id="@+id/localDestinationActivity" android:label="@string/localActivityTitle" app:action="android.intent.action.VIEW" app:data="https://example.com" app:targetPackage="com.example.android.another.app" /> </navigation>.
Dinamik bağımsız değişkenler
Önceki örneklerde, hedeflere gitmek için sabit URL'ler kullanılıyordu. En son haberleri sunan,
Ayrıca,
URL'yi tıklayın. Örneğin, bir URL'de şuna benzer biçimde bir kullanıcı kimliği gönderebilirsiniz:
https://example.com?userId=<actual user ID>
Bu durumda, data
özelliği yerine dataPattern
özelliğini kullanın.
Daha sonra,
dataPattern
değeri:
<?xml version="1.0" encoding="utf-8"?> <navigation xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:id="@+id/navigation_graph" app:startDestination="@id/simpleFragment"> <activity android:id="@+id/localDestinationActivity" android:label="@string/localActivityTitle" app:action="android.intent.action.VIEW" app:dataPattern="https://example.com?userId={userId}" app:targetPackage="com.example.android.another.app"> <argument android:name="userId" app:argType="string" /> </activity> </navigation>
Bu örnekte, Güvenli Bağımsız Değişkenler birini kullanarak bir userId
değeri belirtebilirsiniz.
veya Bundle
ile:
Kotlin
navController.navigate(
R.id.localDestinationActivity,
bundleOf("userId" to "someUser")
)
Java
Bundle args = new Bundle();
args.putString("userId", "someUser");
navController.navigate(R.id.localDestinationActivity, args);
Bu örnekte, {userId}
yerine someUser
kullanılır ve şu URI değeri oluşturulur:
https://example.com?userId=someUser
.