我正在尝试使用 Jetpack compose 来实现 redux。场景如下:
我有一个列表视图,需要在可组合函数中显示数据。
@Composable
fun CreateListView(text: String) {
val listdata = state { store.state }
LazyColumn {
//some listview code here
}
}
Run Code Online (Sandbox Code Playgroud)
上面,我想使用从 redux 存储中获取的数据。但商店。订阅方法是独立的,位于可组合项之外。其中,虽然我能够通过新数据更新状态,但更改不会反映回可组合列表视图:
// activity page outside composable
private fun storeSubscription(){
viewModel.storeSubscription = store.subscribe {
when (store.state) {
store.state = // list data from some source
}
}
}
Run Code Online (Sandbox Code Playgroud)
是否可以像上面那样从函数外部更新可组合项,而不发送任何参数?由于 redux 商店是全球性的,所以我认为它应该可以工作。
kotlin redux android-jetpack-compose android-jetpack-compose-list
我正在撰写屏幕上工作,在打开应用程序时,我将用户重定向到个人资料页面。如果个人资料完整,则重定向到用户列表页面。
我的代码如下
@Composable
fun UserProfile(navigateToProviderList: () -> Unit) {
val viewModel: MainActivityViewModel = viewModel()
if(viewModel.userProfileComplete == true) {
navigateToProviderList()
return
}
else {
//compose elements here
}
}
Run Code Online (Sandbox Code Playgroud)
但该应用程序正在闪烁,并且在登录时,我可以看到它一次又一次地调用上述重定向条件。在浏览文档时,它提到我们应该仅通过回调进行导航。我在这里如何处理这种情况?我这里没有 onCLick 条件。
我刚刚将撰写版本更新为 1.0.0?beta07,并显示了此运行时错误
No interface method startRestartGroup(ILjava/lang/String;)Landroidx/compose/runtime/Composer; in class Landroidx/compose/runtime/Composer; or its super classes (declaration of 'androidx.compose.runtime.Composer'
....
at com.google.accompanist.coil.CoilImage__CoilKt.CoilImage(Coil.kt:245)
at com.google.accompanist.coil.CoilImage.CoilImage(Coil.kt:1)
Run Code Online (Sandbox Code Playgroud)
下面是我的 gradle 依赖文件
implementation 'androidx.core:core-ktx:1.5.0'
implementation 'androidx.appcompat:appcompat:1.3.0'
implementation 'com.google.android.material:material:1.3.0'
implementation "androidx.compose.compiler:compiler:$compose_version"
implementation "androidx.compose.ui:ui:$compose_version"
implementation "androidx.compose.material:material:$compose_version"
implementation "androidx.compose.ui:ui-tooling:$compose_version"
implementation "androidx.compose.runtime:runtime:$compose_version"
implementation "androidx.compose.runtime:runtime-livedata:$compose_version"
implementation 'androidx.activity:activity-compose:1.3.0-alpha08'
implementation "androidx.lifecycle:lifecycle-viewmodel-compose:1.0.0-alpha05"
implementation 'androidx.lifecycle:lifecycle-runtime-ktx:2.3.1'
implementation "io.coil-kt:coil-gif:1.2.1"
implementation "io.coil-kt:coil-svg:1.2.1"
implementation "com.google.accompanist:accompanist-coil:0.6.2"
Run Code Online (Sandbox Code Playgroud)
和版本 compose_version = '1.0.0-beta07'
我想使用权重制作一个简单的喷气背包组合布局。下面是代码
Row() {
Column(
Modifier.weight(1f).background(Blue)){
Text(text = "Weight = 1", color = Color.White)
}
Column(
Modifier.weight(2f).background(Yellow)
) {
Text(text = "Weight = 2")
}
}
Run Code Online (Sandbox Code Playgroud)
但是如果我的内部视图来自其他一些可组合函数,而该函数不知道它将成为列或行的子级,该怎么办?
Row() {
// Calling Some composable function here
}
Run Code Online (Sandbox Code Playgroud)
在这种情况下,我无法访问 Modifier.weight(..) 函数,因为它认为它不在行或列范围内,因为它是一个独立的函数。
我正在尝试使用 zxing 库实现 qr 扫描仪。为此,我在屏幕上添加了一个按钮,单击它后,我将启动扫描仪,如下所示
Button(
onClick = {
val intentIntegrator = IntentIntegrator(context)
intentIntegrator.setPrompt(QrScanLabel)
intentIntegrator.setOrientationLocked(true)
intentIntegrator.initiateScan()
},
modifier = Modifier
.fillMaxWidth()
) {
Text(
text = QrScanLabel
)
}
Run Code Online (Sandbox Code Playgroud)
但是,它启动了一个意图,期望onActivityResult方法返回结果。Jetpack compose 使用rememberLauncherForActivityResult如下
val intentLauncher = rememberLauncherForActivityResult(
contract = ActivityResultContracts.StartIntentSenderForResult()
) {
if (it.resultCode != RESULT_OK) {
return@rememberLauncherForActivityResult
}
...
}
Run Code Online (Sandbox Code Playgroud)
但我们如何在这里将两者整合在一起呢?
我怎样才能使文本字段随着其文本内容而增加高度?我尝试使用类似于下面的代码,但它的高度是固定的,并且不会增长。
Scaffold(
topBar = {
},
content = {
Box(modifier = Modifier.padding(it)) {
Column(){
LazyColumn(modifier = Modifier.fillMaxHeight(0.9)){
// some composable here for UI
}
Row(){
// icon
BasicTextField(
maxLines = 4,
)
// icon
}
}
}
}
)
Run Code Online (Sandbox Code Playgroud)
虽然我似乎已经通过给列赋予 0.9 来固定高度,但我不明白如何不给出固定高度并仍然随内容动态增长文本字段高度?
android textfield android-jetpack-compose android-jetpack-compose-text
我想datePicker在 Jetpack compose 中单击按钮打开对话框。
为此,我在按钮的onClick操作中使用以下代码。
val context = LocalContext.current
Button(onClick = {
(context as AppCompatActivity).let {
val picker = MaterialDatePicker.Builder.datePicker().build()
picker.show(it.supportFragmentManager, picker.toString())
picker.addOnPositiveButtonClickListener {
// some code
}
}
})
Run Code Online (Sandbox Code Playgroud)
如果我使用的是ComponentActivity,supportFragmentManager则不受支持。
可以从 扩展活动AppCompatActivity吗?
或者有没有其他方法,如果上述解决方案不正确,我可以得到解决方案?
android ×5
android-jetpack-compose-list ×1
android-jetpack-compose-text ×1
kotlin ×1
navigation ×1
redux ×1
textfield ×1
zxing ×1