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 işlemler yapmanıza olanak tanır. Etkinlik hedeflerin kullanılması yararlı olabilir.
Oluşturma ve Kotlin DSL
Gezinme grafiğinize etkinlik hedefi ekleme işlemi, hem Compose'da hem de Kotlin DSL'yi parçalarla kullanırken temelde aynıdır. Çünkü
NavGraph
öğenizi NavHost
composable'ınıza iletirken aynı
createGraph()
lambda.
Daha fazla bilgi için Parçalar ve Kotlin DSL başlıklı makaleyi inceleyin.
XML
Etkinlik hedefi oluşturma, 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 gösterilir 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, derleme zamanında etkinlik sınıfına bağımlılığınız olmayabilir veya dolaylı intent üzerinden geçmenin dolaylılık düzeyini tercih edebilirsiniz. İ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, userId
değerini Güvenli Parametreler veya Bundle
ile belirtebilirsiniz:
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
.