android - 使用 Jetpack Navigation 移动到 MainActivity
问题描述
如何从 MainActivity 中的 SettingsListFragment 移动?
<fragment
android:id="@+id/settings_list_fragment"
android:name="com.mandarine.targetList.features.settings.SettingsListFragment"
android:label="@string/settings"
tools:layout="@layout/fragment_settings_list">
</fragment>
因为在我的导航图中我没有来自 MainActivity 的屏幕。我在一项活动中有整个导航,你可以检查代码
class MainActivity : AppCompatActivity(), MainActivityViewContract {
private lateinit var auth: FirebaseAuth
private lateinit var mAuthStateListener: FirebaseAuth.AuthStateListener
private val presenter = MainActivityPresenter(contract = this)
private lateinit var appBarConfiguration: AppBarConfiguration
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
setSupportActionBar(toolbar)
signIn()
setupViews()
}
override fun onSupportNavigateUp(): Boolean {
return findNavController(R.id.nav_host_fragment).navigateUp(appBarConfiguration)
}
override fun onResume() {
super.onResume()
auth.addAuthStateListener(mAuthStateListener)
}
override fun onPause() {
super.onPause()
auth.removeAuthStateListener(mAuthStateListener)
}
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
super.onActivityResult(requestCode, resultCode, data)
presenter.onActivityResult(requestCode, resultCode)
}
override fun cancelSignIn() {
finish()
}
private fun setupViews() {
val host: NavHostFragment = supportFragmentManager
.findFragmentById(R.id.nav_host_fragment) as NavHostFragment? ?: return
val navController = host.navController
appBarConfiguration = AppBarConfiguration(navController.graph)
val drawerLayout: DrawerLayout? = findViewById(R.id.drawer_layout)
appBarConfiguration = AppBarConfiguration(
setOf(R.id.target_list, R.id.settings_list_fragment, R.id.calendar_fragment),
drawerLayout
)
setupActionBar(navController, appBarConfiguration)
setupNavigationMenu(navController)
setupBottomNavMenu(navController)
}
private fun setupNavigationMenu(navController: NavController) {
val sideNavView = findViewById<NavigationView>(R.id.nav_view)
sideNavView?.setupWithNavController(navController)
}
private fun setupActionBar(
navController: NavController,
appBarConfig: AppBarConfiguration
) {
setupActionBarWithNavController(navController, appBarConfig)
}
private fun setupBottomNavMenu(navController: NavController) {
val bottomNavigationView = findViewById<BottomNavigationView>(R.id.bottom_navigation_view)
bottomNavigationView?.setupWithNavController(navController)
}
private fun signIn() {
auth = FirebaseAuth.getInstance()
mAuthStateListener = FirebaseAuth.AuthStateListener { firebaseAuth ->
presenter.signIn(activity = this, user = firebaseAuth.currentUser)
}
}
}
解决方案
您可以<activity../>
在导航图中添加标签并将其设置为操作中的目的地。
<activity
android:id="@+id/main_activity_destination"
android:name="com.mandarine.your.package.path.here.MainActivity" />
然后,您可以调用navController.navigate(R.id.main_activity_destination)
或者,如果您想更好地控制导航图中的流程,您可以创建一个操作:
<action
android:id="@+id/go_to_main_activity"
app:clearTask="true"
app:destination="@+id/main_activity_destination"
app:launchSingleTop="true"
app:popUpTo="@id/main_activity_destination" />
然后,您可以调用navController.navigate(R.id.go_to_main_activity)
推荐阅读
- saml - 如何使用 ADFS 使用 SAMLResponse?
- c# - 我如何向第三方 api 发出请求?使用 httpclient
- php - 在 vs 代码上产生 /usr/bin/php ENOENT 错误
- javascript - 在 JavaScript 中转换西里尔字符
- reactjs - 使用 redux 操作更新状态后,React 组件不更新
- python - Python & Beautifulsoup 4 - findAll 没有得到所有元素,只得到第一个?
- blockchain - 无法执行的幽灵订单
- jmeter - 如何使用 bean-shell 断言在下一个线程组中使用数组对象值?
- json - HMRC MTD Hello World 与 Qt
- c# - 如何执行函数返回的字符串