我正在尝试在我的 Compose 应用程序中实现搜索栏。我有一个文本字段,当我在文本字段外部单击时,我想失去焦点并隐藏键盘。但是,我不知道该怎么做。我确实尝试过这样做,我在 GitHub 上看到了这一点。
不过,我做了一些改变。原始解决方案使用了这部分代码 isHintDisplayed = it != FocusState.Active,但似乎已被弃用。所以我把它改成了isHintDisplayed = it.isFocused != true理论上应该做同样的事情。如果我恢复到旧版本的 compose 并使用 FocusState.Active,焦点/取消焦点可以完美工作,但我无法让它与我的代码一起使用。
有任何想法吗?
这是我的代码:
@Composable
fun ListScreen(
navController: NavController
) {
Surface(
color = MaterialTheme.colors.background,
modifier = Modifier.fillMaxSize()
) {
Column {
Spacer(modifier = Modifier.height(20.dp))
Image(
painter = painterResource(id = R.drawable.ic_international_pok_mon_logo),
contentDescription = "Cards",
modifier = Modifier
.fillMaxWidth()
.align(CenterHorizontally)
)
SearchBar(
hint = "Search",
modifier = Modifier
.fillMaxWidth()
.padding(16.dp)
) {
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
这是搜索栏:
@Composable
fun SearchBar(
modifier: Modifier …Run Code Online (Sandbox Code Playgroud) android kotlin android-jetpack-compose android-compose-textfield
我有课StartRouter。我想为每个活动提供此类的不同实例,并只要活动处于活动状态就保持活动状态(为此我所做的@ActivityScope)。
问题是它在我的代码中没有这样做。看起来 dagger 为每个注释提供了一个实例,在我的例子中,一次为@ActivityScope. 该瞄准镜是定制的匕首瞄准镜。
这是我的两个模块(每个活动一个),第一个模块:
\n\n@Module\npublic class SplashModule {\n\n @Provides\n SplashVMFactory splashVMFactory(StartRouter startRouter){\n return new SplashVMFactory(startRouter);\n\n\n @Provides\n StartRouter startRouter(){\n return new StartRouter();\n }\n\n}\nRun Code Online (Sandbox Code Playgroud)\n\n第二个模块:
\n\n@Module\npublic class QuestionModule {\n\n @Provides\n QuestionVMFactory questionVMFactory(StartRouter startRouter){\n return new QuestionVMFactory(startRouter);\n }\n\n @Provides\n StartRouter startRouter(){\n return new StartRouter();\n }\n\n}\nRun Code Online (Sandbox Code Playgroud)\n\n我有这个:
\n\n@Module\npublic abstract class BinderModule {\n\n @ActivityScope\n @ContributesAndroidInjector(modules = SplashModule.class)\n abstract SplashActivity bindSplashActivity();\n\n @ActivityScope\n @ContributesAndroidInjector(modules = QuestionModule.class)\n abstract QuestionActivity bindQuestionActivity();\n\n}\nRun Code Online (Sandbox Code Playgroud)\n\n我的应用程序组件:
\n\n …我尝试运行一个测试类,并发现了下面的构建错误。它仅在尝试运行测试时出现,而不是在构建和运行应用程序时出现。关于如何解决这个问题有什么建议吗?我根本没有在我的应用程序中使用 kotlin。
org.gradle.api.internal.tasks.TaskDependencyResolveException: Could not determine the dependencies of task ':app:preDebugAndroidTestBuild'.
at org.gradle.api.internal.tasks.CachingTaskDependencyResolveContext.getDependencies(CachingTaskDependencyResolveContext.java:68)
at org.gradle.execution.plan.TaskDependencyResolver.resolveDependenciesFor(TaskDependencyResolver.java:46)
at org.gradle.execution.plan.LocalTaskNode.getDependencies(LocalTaskNode.java:106)
at org.gradle.execution.plan.LocalTaskNode.resolveDependencies(LocalTaskNode.java:79)
at org.gradle.execution.plan.DefaultExecutionPlan.addEntryTasks(DefaultExecutionPlan.java:167)
at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph.addEntryTasks(DefaultTaskExecutionGraph.java:139)
at org.gradle.execution.TaskNameResolvingBuildConfigurationAction.configure(TaskNameResolvingBuildConfigurationAction.java:48)
at org.gradle.execution.DefaultBuildConfigurationActionExecuter.configure(DefaultBuildConfigurationActionExecuter.java:57)
at org.gradle.execution.DefaultBuildConfigurationActionExecuter.access$200(DefaultBuildConfigurationActionExecuter.java:26)
at org.gradle.execution.DefaultBuildConfigurationActionExecuter$2.proceed(DefaultBuildConfigurationActionExecuter.java:63)
at org.gradle.execution.DefaultTasksBuildExecutionAction.configure(DefaultTasksBuildExecutionAction.java:44)
at org.gradle.execution.DefaultBuildConfigurationActionExecuter.configure(DefaultBuildConfigurationActionExecuter.java:57)
at org.gradle.execution.DefaultBuildConfigurationActionExecuter.access$200(DefaultBuildConfigurationActionExecuter.java:26)
at org.gradle.execution.DefaultBuildConfigurationActionExecuter$2.proceed(DefaultBuildConfigurationActionExecuter.java:63)
at org.gradle.execution.ExcludedTaskFilteringBuildConfigurationAction.configure(ExcludedTaskFilteringBuildConfigurationAction.java:47)
at org.gradle.execution.DefaultBuildConfigurationActionExecuter.configure(DefaultBuildConfigurationActionExecuter.java:57)
at org.gradle.execution.DefaultBuildConfigurationActionExecuter.access$200(DefaultBuildConfigurationActionExecuter.java:26)
at org.gradle.execution.DefaultBuildConfigurationActionExecuter$1.run(DefaultBuildConfigurationActionExecuter.java:43)
at org.gradle.internal.Factories$1.create(Factories.java:25)
at org.gradle.api.internal.project.DefaultProjectStateRegistry.withLenientState(DefaultProjectStateRegistry.java:132)
at org.gradle.api.internal.project.DefaultProjectStateRegistry.withLenientState(DefaultProjectStateRegistry.java:124)
at org.gradle.execution.DefaultBuildConfigurationActionExecuter.select(DefaultBuildConfigurationActionExecuter.java:39)
at org.gradle.initialization.DefaultGradleLauncher$CalculateTaskGraph.run(DefaultGradleLauncher.java:333)
at org.gradle.internal.operations.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:301)
at org.gradle.internal.operations.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:293)
at org.gradle.internal.operations.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:175)
at org.gradle.internal.operations.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:91)
at org.gradle.internal.operations.DelegatingBuildOperationExecutor.run(DelegatingBuildOperationExecutor.java:31)
at org.gradle.initialization.DefaultGradleLauncher.constructTaskGraph(DefaultGradleLauncher.java:218)
at org.gradle.initialization.DefaultGradleLauncher.doBuildStages(DefaultGradleLauncher.java:155)
at org.gradle.initialization.DefaultGradleLauncher.executeTasks(DefaultGradleLauncher.java:134)
at org.gradle.internal.invocation.GradleBuildController$1.execute(GradleBuildController.java:58)
at org.gradle.internal.invocation.GradleBuildController$1.execute(GradleBuildController.java:55)
at org.gradle.internal.invocation.GradleBuildController$3.create(GradleBuildController.java:82)
at …Run Code Online (Sandbox Code Playgroud) 我正在尝试将Firestore 方法包装到 CompletableEmitter 中,以便能够在成功/完成时返回 Completable.complete() ,在失败时返回 Completable.error() 。(该任务是一个 Firestore 操作,用于更新集合中的文档(该文档中的 1 个字段))
这是firestore method我试图包装成一个返回Task<Void>. 这是未将其包装在 Completable 中的代码:
public static Completable updateDocument(DocumentReference ref, Map<String,Object> fieldsAndValues){
ref.update(fieldsAndValues)
.addOnSuccessListener(aVoid -> {
Timber.d("SUCCESS");
}).addOnCompleteListener(task -> {
Timber.d("COMPLETE");
}).addOnFailureListener(e -> {
Timber.d("ERROR");
});
return Completable.complete(); //just for the sake of returning complete to finish the method...
}
Run Code Online (Sandbox Code Playgroud)
上面的代码按原样执行。
这是我尝试包装该代码:
public static Completable updateDocument(DocumentReference ref, Map<String,Object> fieldsAndValues){
return Completable.create(emitter -> ref.update(fieldsAndValues)
.addOnSuccessListener(aVoid -> emitter.onComplete())
.addOnCompleteListener(task -> emitter.onComplete())
.addOnFailureListener(emitter::onError)); …Run Code Online (Sandbox Code Playgroud) 我正在将Google I/O 的应用程序中的一些架构设计实现到我自己的应用程序中,但我在他们的应用程序中遇到了一些让我感到困惑的东西。
它们有一个带有存储库用例的域层,我通常在我的应用程序中使用它。但是,我确实必须在我的应用程序中为这些用例提供 dagger。但在 Google 的 I/O 应用程序上,我找不到任何提供这些用例的模块。当与注释 @HiltViewModel 的视图模型一起使用时(在我自己的应用程序中),它似乎有效?不知何故,这些被注入到我的视图模型中。我确实必须使用 Hilt 提供所有用例的依赖项(存储库等),但我不必通过 Hilt 提供任何用例。
这是它在我的代码中的外观示例。
用例:
abstract class UseCase<in P, R>(private val coroutineDispatcher: CoroutineDispatcher) {
suspend operator fun invoke(parameters: P): Resource<R> {
return try {
withContext(coroutineDispatcher) {
execute(parameters).let {
Resource.Success(it)
}
}
} catch (e: Exception) {
Timber.d(e)
Resource.Error(e.toString())
}
}
@Throws(RuntimeException::class)
protected abstract suspend fun execute(parameters: P): R
}
Run Code Online (Sandbox Code Playgroud)
usecase的具体实现:
class GetListUseCase @Inject constructor(
private val coroutineDispatcher: CoroutineDispatcher,
private val remoteRepository: RemoteRepository
): UseCase<ListRequest,ItemsList>(coroutineDispatcher) {
override suspend …Run Code Online (Sandbox Code Playgroud) 我正在使用 Jetpack Compose 和 Coil 将照片加载到图像中。我想在加载图像时显示加载指示器,该指示器在加载时替换图片。但是我无法弄清楚并使其正常工作。我的代码的问题是加载指示器正在图像顶部加载(向左,因为我没有设置中心对齐,但它与中心对齐具有相同的行为,只是它位于图像顶部的中心) 。由于框中有额外的项目,它会强制文本视图下降。
有想法该怎么解决这个吗?我想在盒子中央显示加载指示器。
如果有帮助的话,这是带有外观布局的照片。
这是我的代码:
Column {
val painter = rememberAsyncImagePainter(
ImageRequest.Builder(LocalContext.current).data(data = entry.imageUrl).apply(block = fun ImageRequest.Builder.() {
crossfade(true)
.transformations(
)
.build()
}).build()
)
val state = painter.state
if (state is AsyncImagePainter.State.Loading || state is AsyncImagePainter.State.Error) {
CircularProgressIndicator(
color = MaterialTheme.colors.primary,
modifier = Modifier.scale(2f)
)
}
viewModel.getImageBackgroundColor(entry.imageUrl, LocalContext.current) { color ->
dominantColor = color
}
Image(
painter = painter,
contentDescription = entry.name,
modifier = Modifier
.size(120.dp)
.align(CenterHorizontally)
)
Text(
text = entry.name,
fontFamily …Run Code Online (Sandbox Code Playgroud) 我的布局文件中出现错误:
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.myapp.MainActivity$PlaceholderFragment">
<!-- Some stuff here -->
</android.support.constraint.ConstraintLayout>
Run Code Online (Sandbox Code Playgroud)
它在这一行给了我一个错误:
tools:context="com.myapp.MainActivity$PlaceholderFragment"
Run Code Online (Sandbox Code Playgroud)
错误如下:
未解析的类“PlaceHolderFragment”
Android XML 文件内的有效资源引用。
我可以构建我的应用程序并运行它,但我在 Stackoverflow 和其他地方没有找到任何有助于解决我的错误的内容。有人知道我为什么会收到此错误吗?
我有每个患者在不同时间具有不同值的ID长格式数据,使用tidyr::gather()看起来像这样:
ID TIME VALUE
1 10 14
1 20 34
1 30 35
2 10 15
2 20 14
2 30 11
3 10 16
3 20 64
3 30 55
Run Code Online (Sandbox Code Playgroud)
我想添加一个名为包含MAX每个患者达到 max 的时间的新列VALUE,如下所示:
ID TIME VALUE MAX
1 10 14 30
1 20 34 30
1 30 35 30
2 10 15 10
2 20 14 10
2 30 11 10
3 10 16 20
3 20 64 20
3 30 …Run Code Online (Sandbox Code Playgroud)