Coil 接受可绘制资源作为错误占位符。有没有办法在这里使用图像 URL 来代替?
这是我正在处理的代码:
// Global variables
var currentlySelectedImageUri = mutableStateOf<Uri?>(null)
var previousImageUri: Uri? = null
// @Composable fun() {...
Image(
painter = rememberImagePainter(
if (currentlySelectedImageUri.value != null) { // use the currently selected image
currentlySelectedImageUri.value
} else {
if (previousImageUri != null) { // use the previously selected image
previousImageUri
} else {
R.drawable.blank_profile_picture // use the placeholder image
}
}, builder = {
placeholder(R.drawable.blank_profile_picture)
error(R.drawable.blank_profile_picture) // FIXME: Set the previously selected image
}),
contentDescription = "profile image", …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用 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
我无法找到任何有关如何在不使用片段的情况下以纯 Compose 方式创建首选项屏幕的文档。
任何人都可以建议在不使用带有示例的片段的情况下制作首选项屏幕的最佳方法吗?或者我们应该坚持使用片段方式吗?
感谢您的帮助!
我已使用主要变体颜色作为整个应用程序的背景,但在 UI 最初加载时我仍然看到白色屏幕。有什么办法解决吗?
编辑:我创建了一个新的空项目并应用了@Philip Dukhov 的以下建议。结果还是一样。首先出现白色屏幕,并在 Surface 开始加载之前在屏幕上停留至少两秒钟。
class MainActivity : ComponentActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContent {
SOIssueReproduceTheme {
Surface(
color = MaterialTheme.colors.primaryVariant,
modifier = Modifier.fillMaxSize()
) {
Greeting("Android")
}
}
}
}
}
@Composable
fun Greeting(name: String) {
Text(text = "Hello $name!")
}
Run Code Online (Sandbox Code Playgroud)
感谢您的帮助!
我使用 Jetpack Compose 和导航撰写,我想将 id 传递给此viewmodel:
class RecallViewModel(private val id:Long,application: Application):AndroidViewModel(application) {
............................
}
Run Code Online (Sandbox Code Playgroud)
可组合函数:
我不知道如何获得application可组合函数:
@Composable
fun RecallScreen(
id:Long,
onEnd:() -> Unit
){
val recallViewModel = viewModel(factory = RecallViewModelFactory(
id = id,application = "i don't know how to get application"))
}
Run Code Online (Sandbox Code Playgroud)
和工厂
class RecallViewModelFactory(private val id:Long,val application: Application):ViewModelProvider.AndroidViewModelFactory(application) {
override fun <T : ViewModel> create(modelClass: Class<T>): T {
return RecallViewModel(id,application) as T
}
}
Run Code Online (Sandbox Code Playgroud)
composable(
"${Routes.recall}/{id}",
arguments = listOf(navArgument("id") { type = NavType.LongType })
) …Run Code Online (Sandbox Code Playgroud) android kotlin android-jetpack-navigation android-jetpack-compose
我需要调用此函数以通过在可组合函数内单击按钮来显示插页式广告,该函数需要该show()方法的活动:
fun showInterstitial() {
if (mInterstitialAd != null) {
mInterstitialAd?.show(this)
} else {
Log.d("MainActivity", "The interstitial ad wasn't ready yet.")
}
}
Run Code Online (Sandbox Code Playgroud)
如何获取当前活动并更换零件this?
感谢您的回答!
谁能告诉我如何更改应用程序的白色背景颜色?在 Surface 上设置颜色或背景颜色没有任何影响。我为支架内的内容设置了青色背景只是为了调试问题。

class MainActivity : ComponentActivity() {
...
setContent {
ChakkarTheme {
Surface(
color = Color.Red, modifier = Modifier
.fillMaxSize()
.background(Color.DarkGray)
) {
ChakkarApp()
}
...
Run Code Online (Sandbox Code Playgroud)
@Composable
fun ChakkarApp() {
Scaffold(
topBar = { TopAppBar(title = { Text(appTitle) }, navigationIcon = navigationIcon) },
floatingActionButtonPosition = FabPosition.End,
floatingActionButton = {
if (showFab) {
FloatingActionButton(onClick = { /*TODO*/ }) {
Icon(imageVector = Icons.Filled.Add, contentDescription = null)
}
}
},
bottomBar = {
BottomNavigation() {
val navBackStackEntry by navController.currentBackStackEntryAsState()
val currentDestination = …Run Code Online (Sandbox Code Playgroud) 我有三个可组合按钮和一个可组合 Text(),我想在单击某个可组合按钮时将 Text() 可组合的文本值更改为特定值。
我知道如何xml通过使用来实现这一点setText(),并且我尝试通过使用来解决这个问题MutableStateOf(),但我总是在某个地方出错。
我正在尝试在此SO 线程之后设置导航后退按钮,但无法使其工作。
@ExperimentalFoundationApi
@Composable
fun LazyVerticalGridActivityScreen() {
val navController = rememberNavController()
val navigationIcon: (@Composable () -> Unit)? =
if (navController.previousBackStackEntry != null) {
{
IconButton(onClick = { navController.popBackStack() }) {
Icon(imageVector = Icons.Filled.ArrowBack, contentDescription = null)
}
}
} else {
null
}
Scaffold(
topBar = {
TopAppBar(title = { Text("Lazy Vertical Grid") }, navigationIcon = navigationIcon)
},
content = {
NavHost(navController = navController, startDestination = "home") {
composable("home") { HomeScreen(navController) }
composable("details/{listId}") { backStackEntry ->
backStackEntry.arguments?.getString("listId")
?.let { …Run Code Online (Sandbox Code Playgroud) 我正在尝试在 Compose 中检测滑动方向。我为此使用了可拖动修饰符。但可拖动只允许检测一个方向(垂直或水平)。我想检测所有方向(左、右、上、下)的滑动。谁能帮助我我该怎么做?谢谢!
android android-jetpack-compose android-jetpack-compose-gesture
kotlin ×9
android ×8
android-jetpack-compose-gesture ×1
android-jetpack-compose-list ×1
coil ×1
redux ×1