首页 > 解决方案 > Android Jetpack Compose 错误:不能使用提供的参数调用以下函数:

问题描述

在将可组合项添加到片段时,我不断遇到此错误。看起来,所有可组合项都不会正确地接受参数。

因为TextField我得到了错误:

None of the following functions can be called with the arguments supplied: public fun TextField(value: TextFieldValue, onValueChange: (TextFieldValue) -> Unit, modifier: Modifier = ..., enabled: Boolean = ..., readOnly: Boolean = ..., textStyle: TextStyle = ..., label: (() -> Unit)? = ..., placeholder: (() -> Unit)? = ..., leadingIcon: (() -> Unit)? = ..., trailingIcon: (() -> Unit)? = ..., isError: Boolean = ..., visualTransformation: VisualTransformation = ..., keyboardOptions: KeyboardOptions = ..., keyboardActions: KeyboardActions = ..., single.....

对于组件,我收到此消息:

@Composable invocations can only happen from the context of a @Composable function

这是我的片段:

class MovieListFragment : Fragment() {

    private val viewModel: MovieListViewModel by viewModels()

    @ExperimentalComposeUiApi
    override fun onCreateView(
        inflater: LayoutInflater,
        container: ViewGroup?,
        savedInstanceState: Bundle?
    ): View {
        return ComposeView(requireContext()).apply {
            setContent {

                val movies = viewModel.movies.value
                val query = viewModel.query.value
                val keyboardController = LocalSoftwareKeyboardController.current

                Column {
                    Surface(
                        modifier = Modifier
                            .fillMaxWidth(),
                        color = MaterialTheme.colors.primary,
                        elevation = 8.dp
                    ) {
                        Column {
                            Row(
                                modifier = Modifier
                                    .fillMaxWidth(),
                            ) {
                                TextField(
                                    modifier = Modifier
                                        .fillMaxWidth(0.9f)
                                        .padding(8.dp),
                                    value = query,
                                    onValueChange = { newValue ->
                                        viewModel.onQueryChanged(newValue)
                                    },
                                    label = {
                                        Text(text = "Search Movies")
                                    },
                                    keyboardOptions = KeyboardOptions(
                                        keyboardType = KeyboardType.Text,
                                        imeAction = ImeAction.Search
                                    ),
                                    leadingIcon = { Icon(Icons.Filled.Search, "Search") },
                                    trailingIcon = {
                                        Icon(
                                            Icons.Filled.Clear,
                                            contentDescription = "clear text",
                                            modifier = Modifier
                                                .clickable {
                                                    viewModel.onQueryChanged("")
                                                }
                                        )
                                    },
                                    keyboardActions = KeyboardActions(onSearch = {
                                        viewModel.newSearch(query)
                                        keyboardController?.hide()
                                    }),
                                    textStyle = TextStyle(
                                        color =
                                        MaterialTheme.colors.onSurface
                                    ),
                                    backgroundColor = MaterialTheme.colors.surface,
                                )
                            }
                            LazyColumn {
                                itemsIndexed(
                                    items = movies
                                ) { index, movie ->
                                    MovieCard(movie = movie, onClick = {})
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}

标签: android-studiokotlinandroid-jetpack-compose

解决方案


推荐阅读