小编Raw*_*san的帖子

如何在 Jetpack Compose 中将图像 URL 设置为 Coil 上的错误占位符

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)

android kotlin android-jetpack-compose coil

12
推荐指数
1
解决办法
2万
查看次数

在可组合函数之外更新状态。(喷气背包组成)

我正在尝试使用 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

10
推荐指数
2
解决办法
1万
查看次数

在不使用片段的情况下构建首选项屏幕的最佳 Compose 方式是什么?

我无法找到任何有关如何在不使用片段的情况下以纯 Compose 方式创建首选项屏幕的文档。

任何人都可以建议在不使用带有示例的片段的情况下制作首选项屏幕的最佳方法吗?或者我们应该坚持使用片段方式吗?

感谢您的帮助!

android kotlin android-jetpack-compose

10
推荐指数
1
解决办法
2586
查看次数

加载 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)

感谢您的帮助!

android kotlin android-jetpack-compose

9
推荐指数
1
解决办法
2472
查看次数

如何将 id 和应用程序传递给 Jetpack Compose 中的 viewModel/viewModelFactory?

我使用 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

9
推荐指数
1
解决办法
9572
查看次数

如何从可组合函数获取当前活动?

我需要调用此函数以通过在可组合函数内单击按钮来显示插页式广告,该函数需要该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

感谢您的回答!

android kotlin android-jetpack-compose

8
推荐指数
1
解决办法
4792
查看次数

Jetpack Compose 中的应用程序/脚手架白色背景更改问题

谁能告诉我如何更改应用程序的白色背景颜色?在 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)

android kotlin android-jetpack-compose

7
推荐指数
1
解决办法
7784
查看次数

在 Jetpack Compose 中单击按钮时如何更改文本值?

我有三个可组合按钮和一个可组合 Text(),我想在单击某个可组合按钮时将 Text() 可组合的文本值更改为特定值。

我知道如何xml通过使用来实现这一点setText(),并且我尝试通过使用来解决这个问题MutableStateOf(),但我总是在某个地方出错。

像这样的东西

android kotlin android-jetpack-compose

6
推荐指数
1
解决办法
8266
查看次数

撰写导航后退按钮未显示

我正在尝试在此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)

kotlin android-jetpack-compose jetpack-compose-navigation

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

在 Jetpack Compose 上检测滑动方向

我正在尝试在 Compose 中检测滑动方向。我为此使用了可拖动修饰符。但可拖动只允许检测一个方向(垂直或水平)。我想检测所有方向(左、右、上、下)的滑动。谁能帮助我我该怎么做?谢谢!

android android-jetpack-compose android-jetpack-compose-gesture

1
推荐指数
2
解决办法
1072
查看次数