WorkManager 是 Android Jetpack 中的一个库,用于管理后台任务。它适用于需要保证执行的任务,或者需要按照特定约束(如网络连接、电量等)执行的任务。
导航组件(Navigation Component)是 Android Jetpack 中的一个库,用于简化应用内的导航。它使用一个导航图(navigation graph)来定义应用的各个目的地(如 Activity 或 Fragment),并通过导航操作(navigation action)在这些目的地之间进行切换。
假设你有一个通知,点击后需要启动一个特定的 Fragment(例如 DetailFragment
)。
<!-- res/navigation/nav_graph.xml -->
<navigation xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/nav_graph"
app:startDestination="@id/homeFragment">
<fragment
android:id="@+id/homeFragment"
android:name="com.example.HomeFragment"
android:label="Home" />
<fragment
android:id="@+id/detailFragment"
android:name="com.example.DetailFragment"
android:label="Detail" />
</navigation>
// 创建通知
val notification = NotificationCompat.Builder(context, CHANNEL_ID)
.setContentTitle("Notification Title")
.setContentText("Click to open DetailFragment")
.setSmallIcon(R.drawable.ic_notification)
.setContentIntent(getPendingIntent(context))
.build()
// 获取 PendingIntent
private fun getPendingIntent(context: Context): PendingIntent {
val navController = findNavController(R.id.nav_host_fragment)
val action = navController.createGraphNavigator().createNavigateAction(R.id.detailFragment)
return PendingIntent.getActivity(context, 0, Intent(context, MainActivity::class.java), PendingIntent.FLAG_UPDATE_CURRENT or PendingIntent.FLAG_IMMUTABLE)
}
MainActivity
中处理导航:class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
val navHostFragment = supportFragmentManager.findFragmentById(R.id.nav_host_fragment) as NavHostFragment
val navController = navHostFragment.navController
}
}
MainActivity
中处理导航逻辑,通过 NavController
进行 Fragment 切换。nav_graph.xml
中定义参数,并在创建 PendingIntent
时传递参数。<!-- 在 nav_graph.xml 中定义参数 -->
<fragment
android:id="@+id/detailFragment"
android:name="com.example.DetailFragment"
android:label="Detail">
<argument
android:name="itemId"
app:argType="string" />
</fragment>
// 在创建 PendingIntent 时传递参数
val action = navController.createGraphNavigator().createNavigateAction(R.id.detailFragment, Bundle().apply { putString("itemId", "123") })
领取专属 10元无门槛券
手把手带您无忧上云