我目前正在我的项目中使用Android导航架构。它有一个功能,可以通过快捷方式启动任何片段。目前我正在使用NavController在单击快捷方式时导航到所需的目的地。但是当我多次单击快捷方式时,每次都会创建一个新的片段实例。所以,我的问题是,有没有办法在使用NavController导航到一个片段时只接受一个片段实例?我谷歌了很多次,但一无所获。提前感谢。
在导航到目标之前添加检查,因为它不会添加新实例。
class A: AppCompatActivity {
fun onCreate(...) {
// ...While navigating
if (navController.currentDestination?.id != desiredDestination?.id) {
navController.navigate(desiredDestination)
}
// ...else do nothing
}
}
从NavController回调:https://developer.android.com/reference/androidx/navigation/NavController#addOnDestinationChangedListener(androidx.navigation.NavController. OnDestinationChangedListener)
您可以使用safeOnClickListener而不是默认的onClickListener来捕获点击快捷方式,因此基本上使用safeOnClickListener可以在给定的持续时间内忽略所有点击事件。
class SafeClickListener(
private var defaultInterval: Int = 2000,
private val onSafeCLick: (View) -> Unit
) : View.OnClickListener {
private var lastTimeClicked: Long = 0
override fun onClick(v: View) {
if (SystemClock.elapsedRealtime() - lastTimeClicked < defaultInterval) {
return
}
lastTimeClicked = SystemClock.elapsedRealtime()
onSafeCLick(v)
}
}
fun View.setSafeOnClickListener(delay: Int = 2000, onSafeClick: (View) -> Unit) {
val safeClickListener = SafeClickListener(delay) {
onSafeClick(it)
}
setOnClickListener(safeClickListener)
}
您可以通过navGraphViewModels使用委托
最重要的是将id设置为您的视图,以便在配置更改期间保存状态。这在官方文档中没有提到。
默认情况下,在配置更改期间(旋转和...)不会保存片段导航。
ViewModel将在配置更改期间保持不变,您可以在那里保存您的状态然后恢复它。
同时检查以下链接:
https://code.luasoftware.com/tutorials/android/android-jetpack-navigation-lost-state-after-navigation/
和
Android导航组件:如何保存片段状态
问题内容: 我想使我的网站一次只允许一个会话。例如,假设用户已经登录到我在firefox上的网站,如果该用户再次登录到另一台浏览器(例如同一台计算机或另一台计算机上的Opera),则Firefox上的会话将被破坏。但是,如果仍为一届会议,则有关Firefox的会议仍将保留。我可以知道该怎么做吗?我正在使用php和apache。谢谢。 问候。本杰明 问题答案: 我建议您做这样的事情: 假设用户“ A
#include <stdio.h> #include <pthread.h> int a = 0; int b = 0; void *thread1_func(void *p_arg) { while (1) { a++; sleep(1); } } void *thread2_fu
我目前正在我的项目中使用Android导航架构。它有一个功能,可以使用快捷方式启动任何片段。假设我的导航图如下所示:A-
问题内容: 我正在使用RxJava计算Android中某些传感器数据的标准化自动相关性。奇怪的是,我的代码引发了一个异常(“ java.lang.IllegalStateException:只允许一个订阅者!”),我不确定该怎么做:我知道GroupedObservables订阅多个订阅者时可能会抛出此异常,但是我不认为我在任何地方都在使用这种东西。 在下面,您找到(最有可能)触发异常的方法: 这是
问题内容: 我需要防止用户多次启动我的Java应用程序(WebStart Swing应用程序)。因此,如果应用程序已经在运行,则应该无法再次启动它或显示警告/再次关闭它。 有一些方便的方法可以做到这一点吗?我考虑过要阻止端口或将某物写入文件。但是希望您可以访问某些系统属性或JVM? 顺便说一句 目标平台是带有Java 1.5的Windows XP 问题答案: 我认为您的建议是在启动应用程序时打开端
我有一个包裹 现在我想禁止在之外的实现,但是应该是公共的,因为我将其用于。 如何做到这一点? 这有什么“套餐最终模式”吗? 你有过这样的情况吗? 详情: 我知道有可能只使用带有包私有构造函数的抽象类,而不是接口,但是和扩展不同的类,因此我需要多重继承(因为模拟多重继承(例如,见有效的Java项目18)在这里不起作用)。