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.