小编mar*_*rs8的帖子

使用decorationBox调整Compose中的TextField标签填充

我正在尝试调整可组合项中标签的开始填充TextSearchBar

我知道一种选择是使用BasicTextField可组合项,但我想避免这种情况并通过添加来使用contentPadding参数(jeran 在下面的帖子中提到)。decorationBoxandroidx.compose.material:material:1.2.0-alpha04

我在添加decorationBox 时遇到困难(不太熟悉lambda 参数函数的工作原理)。请帮助我如何实现decorationBox来调整标签文本的开始填充?

删除 jetpack compose textfield 上的默认填充

@Composable
fun TextSearchBar(
    modifier: Modifier = Modifier,
    value: String,
    label: String,
    onDoneActionClick: () -> Unit = {},
    onClearClick: () -> Unit = {},
    onFocusChanged: (FocusState) -> Unit = {},
    onValueChanged: (String) -> Unit,
) {
    TextField(
        value = value,
        onValueChange = { query ->
            onValueChanged(query)
        },
        modifier = modifier
            .padding(horizontal = 4.dp, vertical = 0.dp)
            .fillMaxWidth()
            .onFocusChanged { onFocusChanged(it) }, …
Run Code Online (Sandbox Code Playgroud)

android android-jetpack-compose android-compose-textfield

4
推荐指数
1
解决办法
4317
查看次数

运行 kotlin 流一次,但下游收到两次

设想

EventHandler.sharedFlow单击按钮时会发出热流。

Repository该流由在 中执行某些操作接收OnEach{}

EventCollectorA然后,两个事件收集器和接收存储库流EventCollectorB

然后,事件收集器流被组合并收集在 中MyViewModel

问题

这两个事件收集器会导致onEach{...}每次单击时运行两次。但是我只想运行onEach{...}一次并在两个事件收集器中接收它。我怎样才能实现这个目标?

注意:我使用 Hilt 只拥有一个Repository,EventCollectorA实例EventCollectorB

流程图

代码

@AndroidEntryPoint
class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        val binding = ActivityMainBinding.inflate(layoutInflater)
        setContentView(binding.root)

        val viewModel = ViewModelProvider(this).get(MyViewModel::class.java)
        binding.buttonB.setOnClickListener {
            viewModel.userClickEvent("Click Event")
        }
    }
}
Run Code Online (Sandbox Code Playgroud)
@HiltViewModel
class MyViewModel @Inject constructor(
    private val eventHandler: EventHandler,
    private val eventCollectorA: EventCollectorA,
    private val eventCollectorB: EventCollectorB,
) : ViewModel() { …
Run Code Online (Sandbox Code Playgroud)

android kotlin kotlin-flow kotlin-sharedflow

4
推荐指数
1
解决办法
2485
查看次数

java开发包中“jdku”中的“u”是什么意思?

我在一些下载文件中看到它,例如OpenJDK21U-jdk_x64_linux_hotspot_2023-08-09-06-56.tar.gz

一些 github 分支也带有“U”后缀。

java adoptopenjdk

3
推荐指数
1
解决办法
85
查看次数

通过 Kotlin 中的另一个挂起函数发出 Flow

如何让下面的流量收集器收到“hello”?收集器正在调用,myFunction1()而收集器又调用myFunction2(). 两者都是挂起函数。

目前,当我点击运行并且没有收到流量时,什么也没有发生。我在这里错过了什么吗?

CoroutineScope(IO).launch {
    val flowCollector = repo.myFunction1()
        .onEach { string ->
            Log.d("flow received: ", string)
        }
        .launchIn(GlobalScope)
}

Run Code Online (Sandbox Code Playgroud)
class Repo {

    suspend fun myFunction1(): Flow<String> = flow {
        /*some code*/
        myFunction2()
    }

    suspend fun myFunction2(): Flow<String> = flow {
        /*some code*/
        emit("hello")
    }
}
Run Code Online (Sandbox Code Playgroud)

suspend coroutine kotlin kotlin-coroutines kotlin-flow

0
推荐指数
1
解决办法
3627
查看次数