我正在使用 Hilt 注入一些依赖项,如下所示:
@Module
@InstallIn(SingletonComponent::class)
object SomethingModule {
@Provides
fun provideSomething(@ApplicationContext context: Context): Something {
//return RealSomething
}
}
Run Code Online (Sandbox Code Playgroud)
我想在我的测试中替换此绑定,并按照本指南将这个假模块添加到与我的仪器测试相同的文件夹中:
@Module
@TestInstallIn(
components = [SingletonComponent::class],
replaces = [SomethingModule::class]
)
object FakeSomethingModuleModule {
@Provides
fun provideSomethingModule(): Something {
return FakeSomething()
}
}
Run Code Online (Sandbox Code Playgroud)
当我尝试运行仪器测试时,构建失败并出现重复的绑定错误:
error: [Dagger/DuplicateBindings] com.example.Something is bound multiple times:
public abstract static class SingletonC implements HiltWrapper_ActivityRetainedComponentManager_ActivityRetainedComponentBuilderEntryPoint,
Run Code Online (Sandbox Code Playgroud)
注释掉 Fake Module 可以解决该问题。有人看到我在这里缺少什么吗?
编辑:刚刚尝试并@UninstallModules遇到了相同的构建错误:
@UninstallModules(SomethingModule::class)
@HiltAndroidTest
@RunWith(AndroidJUnit4::class)
class MyInstrumentedTest {
@Module
@InstallIn(SingletonComponent::class)
object FakeSomethingModule {
@Provides
fun provideSomthing(): Something …Run Code Online (Sandbox Code Playgroud) 我是 espresso 测试的新手,我想为 BiometricPrompt 编写 Espresso 测试,BiometricPrompt 是 Google 提供的用于验证指纹的 API。
我有一个 TextField,它有一个控制器,它有一个更改监听器。像这样:
final TextEditingController _oneController = TextEditingController();
Run Code Online (Sandbox Code Playgroud)
@override
void initState() {
super.initState();
_oneController.addListener(_listener);
}
Run Code Online (Sandbox Code Playgroud)
TextField(
controller: _oneController,
),
Run Code Online (Sandbox Code Playgroud)
哪里_listener是一个函数,它将调度我的表单已被编辑的事件。
这工作正常,但只要您关注 TextField,它就会触发此侦听器运行,即使未对字段中的文本进行任何更改。
当 TextField 进入焦点时,有没有办法阻止我的听众被调用?当我的 TextField 中的文本没有更改时,我不希望我的侦听器被调用。
我正在实施生物识别技术,如果用户不想要/拥有生物识别技术,我希望能够回退到使用 PIN 码。
问题在于,当用户选择“使用 PIN”、输入他们的 PIN 并验证两个不同的回调时,会触发:
第一个:onAuthenticationSucceeded这是预期的。第二种:onAuthenticationError与BiometricConstants.ERROR_USER_CANCELED。
为什么输入 PIN 而不是生物识别会触发 ERROR_USER_CANCELED?我通过完成我的 Activity 处理了这个错误,这不是我想要的流程。我这样做是因为当用户点击对话框外时,我想关闭应用程序,并且在这种情况下会触发相同的错误(尽管有此修复)。
有没有办法区分有意取消对话(通过后退按钮或点击对话外)和输入 PIN 码?
这是我的PromptInfo:
val promptInfo = BiometricPrompt.PromptInfo.Builder()
.setTitle(getString(R.string.lock_title))
.setSubtitle(getString(R.string.lock_summary))
.setConfirmationRequired(false)
.setDeviceCredentialAllowed(true)
.build()
Run Code Online (Sandbox Code Playgroud)
在装有 Android 10 的 Pixel 2 上进行测试。使用版本"androidx.biometric:biometric:1.0.1". 谢谢!
我有一个 TextField 组件,我想将其设置为初始内容。初始内容将使用 Flow 从数据库中获取。
我有这段TextField代码(大致遵循此 Codelabs 教程):
@Composable
private fun EntryText(placeholder: String, initialText: String = "", ) {
val (text, setText) = remember { mutableStateOf(initialText) }
EntryTextField(
text = text,
placeholder = placeholder,
onTextChanged = setText
)
}
Run Code Online (Sandbox Code Playgroud)
和
@Composable
private fun EntryTextField(text: String, placeholder: String, onTextChanged: (String) -> Unit) {
TextField(
modifier = Modifier.fillMaxWidth(),
value = text,
onValueChange = {
onTextChanged(it)
},
placeholder = { Text(text = placeholder) }
)
}
Run Code Online (Sandbox Code Playgroud)
我想像这样使用它来设置 aText …
我在这样的代码中手动设置了一个新的过渡:
intro_motion_layout.setTransition(R.id.middle, R.id.end)
Run Code Online (Sandbox Code Playgroud)
有没有办法我也可以这样设置持续时间?
我ConstraintSets在 XML 中定义了多个,当第一次转换完成时,我使用onTransitionCompleted. Transition我的 XML 中有一个,它在那里正确使用了持续时间,但Transitions我在代码中设置的以下内容发生得非常快,我找不到改变它们的持续时间的方法。