JetPack合成AndroidView传递到函数

uxhixvfz  于 2023-02-17  发布在  Android
关注(0)|答案(1)|浏览(121)

我正在尝试在Jetpack编写UI中转换以下代码,

searchResultsView = findViewById<SearchResultsView>.(R.id.search_results_view).apply {
        initialize(
            SearchResultsView.Configuration(CommonSearchViewConfiguration(DistanceUnitType.IMPERIAL))
        )
        isVisible = false
    }

    searchEngineUiAdapter = SearchEngineUiAdapter(
        view = searchResultsView,
        searchEngine = searchEngine,
        offlineSearchEngine = offlineSearchEngine,
    )

我需要在我们的函数SearchEngineUiAdapter中传递searchResultView,
我卡在这里,因为searchView现在是AndroidView,它作为一个合成组件,所以我们不能传递到一个函数。我不知道注入这个searchResultsView到一个函数
下面是最终代码

AndroidView(
        factory = { context ->
            SearchResultsView(context).apply {
                initialize(
                    SearchResultsView.Configuration(
                        CommonSearchViewConfiguration(
                            DistanceUnitType.IMPERIAL
                        )
                    )
                )
            }
        },
        modifier = Modifier
            .fillMaxWidth()
            .background(color = Color.Blue)
dpiehjr4

dpiehjr41#

在Jetpack Compose中,您将数据提供给可组合函数进行显示,而不是相反。您应该初始化并在外部的viewModel中获取搜索结果,然后将用于显示的数据传递给搜索结果组合函数。

val searchResults = searchViewModel.getSearchResults()
AndroidView(
    factory = { context ->
        SearchResultsView(searchResults)
        }
    },
    modifier = Modifier
        .fillMaxWidth()
        .background(color = Color.Blue)

相关问题