我正在实现 NavigationComponent 和一个 BottomNavigationView,我注意到工具栏中显示了所有片段目的地的后退箭头,但startDestination在我的导航图中指定为 的除外。
我能够找到的此实现的所有示例都显示出类似的行为。在我看来,为 BottomNavigationView 的每个相关片段隐藏后退箭头似乎是一种更自然的设计,(点击工具栏中的后退箭头从选项卡 2 导航到选项卡 1 对我来说感觉很奇怪,我以前从未见过这种情况) .
有关示例以及我希望实现的目标,请参见下图。有什么办法可以做到这一点吗?
android android-navigation android-toolbar android-jetpack android-jetpack-navigation
val scoreFragmentArgs1 by navArgs<ScoreFragmentArgs>()
val scoreFragmentArgs2 = ScoreFragmentArgs.fromBundle(arguments!!)
Run Code Online (Sandbox Code Playgroud)
我可以使用上述任何语句访问从前一个片段传递的参数。有人可以解释它们的区别以及何时使用它们。提前致谢
我有一个带有 5 个项目和片段的 BottomNavigationView 活动来显示页面,我将 NavController 设置如下:NavigationUI.setupWithNavController(mBottomNavigationView, navController);
但在某些场景中底部导航中有一个项目会打开另一个活动。
我尝试添加 setOnNavigationItemSelectedListener 并处理它,但是其他项目的导航不起作用。
谁能帮我 ?
android uinavigationcontroller android-jetpack android-jetpack-navigation
我正在尝试在一个新项目中使用底部导航实现 NavController。这是我的第一次尝试,到处都有很多关于此的模棱两可的信息。
所以我的问题涉及每个底部选项卡都有自己的返回堆栈并在底部导航点击之间保留片段。是的,我已经查看了https://github.com/android/architecture-components-samples/tree/master/NavigationAdvancedSample,但我无法理解如何将其与我现有的 Java 代码集成,因为示例在 Kotlin 中。
谁能帮我这个?
android-fragments android-jetpack android-architecture-navigation android-jetpack-navigation
我正在尝试做什么
我正在使用 Android 导航组件来处理我的应用程序中的导航。在此示例中,我有两个屏幕,屏幕 A 和屏幕 B。我希望用户能够单击屏幕 A 中的按钮并能够导航到屏幕 B;然后无法返回到上一屏幕(屏幕 A)。
问题
当用户从屏幕 A 导航到屏幕 B 时,操作栏上的后退按钮仍然允许用户返回上一屏幕,但是当单击底部栏中的后退按钮时,它会退出应用程序,因此这部分工作正常。
我需要做什么才能删除操作栏中的后退按钮?
到目前为止我读过的内容
我已遵循这三篇文章中的指导,但我认为他们可能忽略了ActionBar后退按钮:
我的代码
导航图 - nav_graph.xml
<?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/nav_graph"
app:startDestination="@id/screen_a">
<fragment
android:id="@+id/screen_a"
android:name="com.example.conditionalnavigation.AFragment"
android:label="screen A">
<action
android:id="@+id/action_AFragment_to_BFragment"
app:destination="@id/screen_b"
app:launchSingleTop="true"
app:popUpTo="@id/screen_a"
app:popUpToInclusive="true" />
</fragment>
<fragment
android:id="@+id/screen_b"
android:name="com.example.conditionalnavigation.BFragment"
android:label="screen B" />
</navigation>
Run Code Online (Sandbox Code Playgroud)
MainActivity - 这充当我的单一活动导航主机。
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) { …Run Code Online (Sandbox Code Playgroud) android kotlin back-stack android-navigation android-jetpack-navigation
我在这里有点挣扎。
我想要实现的是,如果发生 401,则从 Httpinterceptor 导航回登录片段。
我使用 Jwt 进行授权,如果令牌不再有效,后端将返回 401 未经授权。
我尝试用谷歌搜索这个问题,但最终没有真正解决我的问题。
到目前为止,我尝试做的是通过 NavHostFragment.findNavController 和 findNavController(MainActivity.activity, 1) 获取导航控制器。
这两件事都不起作用,因为第一个要求您提供拦截器中没有的片段,而第二个则失败,因为我无法找到从拦截器访问 MainActivity 的方法。
没有太多代码,但这就是拦截器现在的样子(由于明显的原因而不起作用)
package de.wabi.vistascraper.library.http.interceptors
import androidx.navigation.Navigation.findNavController
import androidx.navigation.fragment.NavHostFragment
import de.wabi.vistascraper.MainActivity
import de.wabi.vistascraper.ui.main.MainFragment
import okhttp3.Interceptor
import okhttp3.Response
class ErrorInterceptor : Interceptor {
override fun intercept(chain: Interceptor.Chain): Response {
var builder = chain.request().newBuilder()
var response = chain.proceed(builder.build())
var test = NavHostFragment.findNavController(this.);
if(response.code == 401){
// var test = findNavController(MainActivity.activity, 1)
}
return response;
}
}
Run Code Online (Sandbox Code Playgroud)
也许互联网上的你们有一个想法。
提前致谢
大卫
android interceptor kotlin okhttp android-jetpack-navigation
我正在尝试制作一个可组合项,我可以通过使用传递任意大小的图像来填充其宽度来使用它
compose_version = 1.0.0-beta07
Run Code Online (Sandbox Code Playgroud)
@Composable
fun image(image:Int){
Image(painter = painterResource(image),
contentDescriptionn = null, contentScale = ContentScale.FillWidth)
}
Run Code Online (Sandbox Code Playgroud)
当我传递其他图像时,它可以工作,但是当我传递宽度和高度相同的图像时,它不起作用
如何解决这个问题?
我在活动之间(例如活动 A 到活动 B)传递一个可序列化的数据类。活动 B 有 Jetpack Composable 视图。当我通过单击按钮从活动 A 导航到活动 B 时,出现以下崩溃
Process: uk.gov.tfl.gotfl, PID: 10022
java.lang.IllegalStateException: Check failed.
at androidx.compose.runtime.saveable.SaveableStateRegistryImpl.performSave(SaveableStateRegistry.kt:150)
at androidx.compose.ui.platform.DisposableSaveableStateRegistry_androidKt.DisposableSaveableStateRegistry$lambda-0(DisposableSaveableStateRegistry.android.kt:83)
at androidx.compose.ui.platform.DisposableSaveableStateRegistry_androidKt.$r8$lambda$sa5VqeXN41zeUSACzKO7aWvSsug(Unknown Source:0)
at androidx.compose.ui.platform.DisposableSaveableStateRegistry_androidKt$$ExternalSyntheticLambda0.saveState(Unknown Source:2)
at androidx.savedstate.SavedStateRegistry.performSave(SavedStateRegistry.java:240)
at androidx.savedstate.SavedStateRegistryController.performSave(SavedStateRegistryController.java:99)
at androidx.activity.ComponentActivity.onSaveInstanceState(ComponentActivity.java:358)
at android.app.Activity.performSaveInstanceState(Activity.java:2169)
at android.app.Instrumentation.callActivityOnSaveInstanceState(Instrumentation.java:1625)
at android.app.ActivityThread.callActivityOnSaveInstanceState(ActivityThread.java:5680)
at android.app.ActivityThread.callActivityOnStop(ActivityThread.java:5051)
at android.app.ActivityThread.performStopActivityInner(ActivityThread.java:5016)
at android.app.ActivityThread.handleStopActivity(ActivityThread.java:5090)
at android.app.servertransaction.StopActivityItem.execute(StopActivityItem.java:40)
at android.app.servertransaction.TransactionExecutor.executeLifecycleState(TransactionExecutor.java:176)
at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:97)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2246)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loop(Looper.java:233)
at android.app.ActivityThread.main(ActivityThread.java:8010)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:631)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:978)
Run Code Online (Sandbox Code Playgroud)
有谁知道我为什么会崩溃?我没有做任何不同的事情。它简单明了。
android android-jetpack android-jetpack-navigation android-jetpack-compose
Navigation destination that matches request NavDeepLinkRequest{ uri=android-app://androidx.navigation/testScreen/Can I change this (Pin / Password)?/100/300 } cannot be found in the navigation graph
Run Code Online (Sandbox Code Playgroud)
在哪里
我可以更改此设置(PIN 码/密码)吗?
是我的屏幕的标题。我在尝试导航时遇到异常。我怎样才能避免这个问题,因为我的标题包含“/”,它被视为深层链接本身的一部分。
我正在应用程序中实现注销操作。我希望当用户单击“注销”时,转到“登录”。当用户采取以下路径:登录 -> 主页 -> 设置(单击注销) -> 登录时,当我按回键时,应用程序将转到后台并关闭,这是我想要的行为。
但是,当用户采用以下路线时:登录 -> 主页 -> ScreenOne -> ScreenTwo -> 主页 -> ScreenOne -> 设置(单击“注销”)-> 登录,当您按返回时,它会返回到“设置”并如果您再次按下它,它将转到 ScreenOne 等。
这就是当我单击“注销”时导航到“登录”的方式:
navController.navigate(NavigationItem.Login.route) {
popUpTo(NavigationItem.Login.route) {
inclusive = true
}
}
Run Code Online (Sandbox Code Playgroud)
注意:已经尝试将 Navigation.Home.route 作为 popUpTo 的参数。
我不知道是否相关,但这就是我在 Home -> ScreenOne -> ScreenTwo -> Home -> ScreenOne 之间进行导航的方式:
navController.navigate(item.route) {
navController.graph.startDestinationRoute?.let { route ->
popUpTo(route = route) {
saveState = true
}
}
launchSingleTop = true
restoreState = true
}
Run Code Online (Sandbox Code Playgroud)
有谁知道我如何清除后堆栈或保证在第二种行为中,当我在注销后进入登录屏幕并按“返回”时,应用程序将进入第二个计划?
编辑:添加了 NavHost 结构。
@Composable
@ExperimentalFoundationApi
@ExperimentalComposeUiApi …Run Code Online (Sandbox Code Playgroud) android-jetpack-navigation ×10
android ×8
kotlin ×3
android-architecture-navigation ×1
back-stack ×1
interceptor ×1
okhttp ×1