使用 LocalContext.current 会导致应用程序崩溃,告诉我:
java.lang.IllegalStateException: No default context
at androidx.glance.CompositionLocalsKt$LocalContext$1.invoke(CompositionLocals.kt:35)
at androidx.glance.CompositionLocalsKt$LocalContext$1.invoke(CompositionLocals.kt:35)
at kotlin.SynchronizedLazyImpl.getValue(LazyJVM.kt:74)
at androidx.compose.runtime.LazyValueHolder.getCurrent(ValueHolders.kt:29)
at androidx.compose.runtime.LazyValueHolder.getValue(ValueHolders.kt:31)
at androidx.compose.runtime.ComposerImpl.resolveCompositionLocal(Composer.kt:1776)
at androidx.compose.runtime.ComposerImpl.consume(Composer.kt:1746)
at com.bqubique.quran_randomayah.view.VerseCardKt.ButtonTile(VerseCard.kt:282)
at com.bqubique.quran_randomayah.view.ComposableSingletons$VerseCardKt$lambda-2$1.invoke(VerseCard.kt:79)
at com.bqubique.quran_randomayah.view.ComposableSingletons$VerseCardKt$lambda-2$1.invoke(VerseCard.kt:79)
at androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambda.jvm.kt:116)
at androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambda.jvm.kt:34)
at
...
Run Code Online (Sandbox Code Playgroud)
使用的版本:
compose_version = '1.0.5'
wear_compose_version = '1.0.0-alpha15'
我尝试过在任何类型的 @Composable 中调用 LocalContext.current,甚至在 setContent{...} 内的 MainActivity.kt 中调用 LocalContext.current
我正在开发一个 Android 应用程序,当前绑定到我的位置服务,我在活动内部时从中接收位置更新,并且我想在用户完成身份验证过程后从可组合项内部执行此操作
我在我的 jetpack compose 应用程序中使用 koin v3.2.0。我的viewModelOf. 我也从示例项目中正确导入。
dependencies {\n\n implementation \'androidx.core:core-ktx:1.8.0\'\n\n implementation "androidx.compose.material:material:$compose_version"\n implementation \'androidx.compose.material3:material3:1.0.0-alpha14\'\n\n implementation "androidx.compose.ui:ui:$compose_version"\n implementation "androidx.compose.ui:ui-tooling-preview:$compose_version"\n implementation \'androidx.activity:activity-compose:1.5.0\'\n debugImplementation "androidx.compose.ui:ui-tooling:$compose_version"\n debugImplementation "androidx.compose.ui:ui-test-manifest:$compose_version"\n implementation "androidx.compose.runtime:runtime-livedata:$compose_version"\n implementation "androidx.navigation:navigation-compose:$nav_version"\n\n testImplementation \'junit:junit:4.13.2\'\n\n androidTestImplementation \'androidx.test.ext:junit:1.1.3\'\n\n androidTestImplementation \'androidx.test.espresso:espresso-core:3.4.0\'\n\n androidTestImplementation "androidx.compose.ui:ui-test-junit4:$compose_version"\n\n implementation "androidx.lifecycle:lifecycle-viewmodel-compose:$lifecycle_version"\n implementation "androidx.lifecycle:lifecycle-livedata-ktx:$lifecycle_version"\n implementation "androidx.lifecycle:lifecycle-runtime-ktx:$lifecycle_version"\n\n implementation \'androidx.work:work-runtime:2.7.1\'\n\n implementation "com.google.accompanist:accompanist-systemuicontroller:0.17.0"\n\n implementation "com.airbnb.android:lottie-compose:$lottieVersion"\n\n implementation "io.insert-koin:koin-android:$koin_version"\n implementation "io.insert-koin:koin-androidx-compose:$koin_version"\n\n}\nRun Code Online (Sandbox Code Playgroud)\n应用程序模块.kt
\npackage com.vivek.sportsresult.di\n\nimport org.koin.androidx.viewmodel.dsl.viewModelOf\nimport org.koin.dsl.module\n\nval appModule = module {\n viewModelOf(::MainActivityViewModel)\n}\nRun Code Online (Sandbox Code Playgroud)\nMainActivityViewModel.kt
\npackage com.vivek.sportsresult.viewmodel\n\nimport androidx.lifecycle.ViewModel\n\nclass MainActivityViewModel : ViewModel() …Run Code Online (Sandbox Code Playgroud) 我有一个方法“活动”,它托管一个“屏幕”,并且由于状态提升很酷,所以我这样做了,但遇到了问题。
虽然使用Modifier.clickable代码可以完美运行(增加值) ,但使用detectorTapGestures::onTap 时,相同的代码无法正常运行, 如通过Log.d("ExampleScreen", "onClick Multi Count is $multiCount")观察到的那样
@Composable
fun ExampleActivity() {
var multiCount by remember {
mutableStateOf(0)
}
Log.d("ExampleActivity", "Multi Count is $multiCount") //this works either way
ExampleScreen(
multiCount = multiCount,
incrementMultiCount = {
multiCount = ++multiCount
}
)
}
@Composable
fun ExampleScreen(
modifier: Modifier = Modifier,
multiCount: Int,
incrementMultiCount: () -> Unit
) {
Log.d("ExampleScreen", "Example Multi Count is $multiCount") //this works either way
Column(
modifier = modifier
.fillMaxSize()
.padding()
) …Run Code Online (Sandbox Code Playgroud) 如何检测长按
Button(
onClick = onClick,
interactionSource = interactionSource,
modifier = Modifier
.combinedClickable(
onClick = onClick,
onLongClick = onLongClick
)
)
Run Code Online (Sandbox Code Playgroud)
这是行不通的。onClick 是必需的,我猜它会消耗combinedClickable。我还需要一个交互源。我宁愿避免创建自定义按钮。
android button kotlin android-jetpack android-jetpack-compose
在迁移到Android X的过程中,tt似乎Jetifier工具将一些第三方库转换为RC版本(4.6版)。
| +--- com.facebook.android:facebook-common:4.34.0
| | | +--- com.facebook.android:facebook-core:4.34.0 (*)
| | | +--- com.google.zxing:core:3.3.0
| | | +--- androidx.legacy:legacy-support-v4:1.0.0-rc01
| | | | +--- androidx.core:core:1.0.0-rc01 -> 1.0.1 (*)
| | | | +--- androidx.media:media:1.0.0-rc01
| | | | | +--- androidx.annotation:annotation:1.0.0-rc01 -> 1.0.0
| | | | | +--- androidx.core:core:1.0.0-rc01 -> 1.0.1 (*)
| | | | | \--- androidx.versionedparcelable:versionedparcelable:1.0.0-rc01 -> 1.0.0 (*)
| | | | +--- androidx.legacy:legacy-support-core-utils:1.0.0-rc01 -> 1.0.0 (*)
| | | | +--- androidx.legacy:legacy-support-core-ui:1.0.0-rc01 …Run Code Online (Sandbox Code Playgroud) android android-studio android-jetpack androidx android-jetifier
根据https://developer.android.com/topic/libraries/architecture/viewmodel 上的“片段之间共享数据”部分,我们被告知在活动范围内创建一个 ViewModel 并在片段之间共享是要走的路.
这是在 ViewModel 中设置值的 Fragment
class MasterFragment : Fragment() {
private lateinit var itemSelector: Selector
private lateinit var model: SharedViewModel
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
model = activity?.run {
ViewModelProviders.of(this).get(SharedViewModel::class.java)
} ?: throw Exception("Invalid Activity")
itemSelector.setOnClickListener { item ->
// Update the UI
}
}
}
Run Code Online (Sandbox Code Playgroud)
这是使用属性集的细节片段
class DetailFragment : Fragment() {
private lateinit var model: SharedViewModel
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
model = activity?.run {
ViewModelProviders.of(this).get(SharedViewModel::class.java)
} ?: throw Exception("Invalid Activity")
model.selected.observe(this, …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用 Paging 库、MVVM 和 LiveData 实现一个无限列表。
在我的视图(在我的例子中是我的片段)中,我从 ViewModel 中请求数据并观察变化:
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
viewModel.getItems("someSearchQuery")
viewModel.pagedItems.observe(this, Observer<PagedList<Item>> {
// ItemPagedRecyclerAdapter
// EDIT --> Found this in the official Google example
// Workaround for an issue where RecyclerView incorrectly uses the loading / spinner
// item added to the end of the list as an anchor during initial load.
val layoutManager = (recycler.layoutManager as LinearLayoutManager)
val position = layoutManager.findFirstCompletelyVisibleItemPosition()
if (position != RecyclerView.NO_POSITION) {
recycler.scrollToPosition(position)
}
}) …Run Code Online (Sandbox Code Playgroud)