Android Jetpack Composable不';不要对变化做出反应

Android Jetpack Composable不';不要对变化做出反应,android,android-fragments,android-livedata,android-viewmodel,android-jetpack-compose,Android,Android Fragments,Android Livedata,Android Viewmodel,Android Jetpack Compose,我一直在努力效仿唯一一个我能找到支持的好例子,但在我的情况下,它不起作用 我有一个ViewModel与Composable中的@Model对话,并根据MutableLiveData更改加载:Bool,但它不会重新组合 class LoaderViewModel : ViewModel() { val loadingLiveData = MutableLiveData<Boolean>(false) fun fetch() { viewModelSc

我一直在努力效仿唯一一个我能找到支持的好例子,但在我的情况下,它不起作用

我有一个
ViewModel
与Composable中的
@Model
对话,并根据
MutableLiveData
更改
加载:Bool
,但它不会重新组合

class LoaderViewModel : ViewModel() {

    val loadingLiveData = MutableLiveData<Boolean>(false)

    fun fetch() {
        viewModelScope.launch {
            val flow = flowOf("result")
                .onStart {
                    loadingLiveData.value = true
                    delay(2000)
                }
                .onCompletion {
                    loadingLiveData.value = false
                }
                .collect {
                    // Do something with the result
                }
        }
    }
}

class LoaderFragment : Fragment() {

    private val viewModel: LoaderViewModel by viewModel()

    @Model
    class ActivityLoadingState(var loading: Boolean = false)
    private val activityLoadingState = ActivityLoadingState()

    override fun onCreateView(
        inflater: LayoutInflater,
        container: ViewGroup?,
        savedInstanceState: Bundle?
    ): View? {
        return FrameLayout(context ?: return null).apply {
            layoutParams = FrameLayout.LayoutParams(MATCH_PARENT, MATCH_PARENT)
            setContent {
                Loader()
            }
        }
    }

    @Composable
    fun Loader() = MaterialTheme {
        val loadingModel = activityLoadingState
        Container {
            Center {
                if (loadingModel.loading) {
                    CircularProgressIndicator(
                        color = Color(0xFFFF0000)
                    )
                } else {
                    Container { }
                }
            }
        }
    }

    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
        super.onViewCreated(view, savedInstanceState)
        subscribeUI()
        viewModel.fetch()
    }

    private fun subscribeUI() {
        viewModel.loadingLiveData.observe(viewLifecycleOwner) {
            activityLoadingState.loading = it
        }
    }

}
class LoaderViewModel:ViewModel(){
val loadingLiveData=MutableLiveData(false)
取乐{
viewModelScope.launch{
val流量=流量(“结果”)
.onStart{
loadingLiveData.value=true
延迟(2000年)
}
.未完成{
loadingLiveData.value=false
}
.收集{
//对结果做点什么
}
}
}
}
类LoaderFragment:Fragment(){
private val viewModel:LoaderViewModel by viewModel()
@模型
类ActivityLoadingState(变量加载:Boolean=false)
private val activityLoadingState=activityLoadingState()
覆盖创建视图(
充气机,
容器:视图组?,
savedInstanceState:捆绑?
):查看{
返回帧布局(上下文?:返回空)。应用{
layoutParams=FrameLayout.layoutParams(匹配父项,匹配父项)
设置内容{
加载器()
}
}
}
@组合的
乐趣加载程序()=材料主题{
val loadingModel=activityLoadingState
容器{
居中{
if(加载模型。加载){
循环压缩机指示器(
颜色=颜色(0xFFFF0000)
)
}否则{
容器{}
}
}
}
}
覆盖已创建的视图(视图:视图,保存状态:捆绑?){
super.onViewCreated(视图,savedInstanceState)
subscribeUI()
viewModel.fetch()
}
私人娱乐订阅界面(){
viewModel.loadingLiveData.observe(viewLifecycleOwner){
activityLoadingState.loading=it
}
}
}

我要做的是在我的ViewModel中有流,并在composables中使用函数collectAsState()