- объявите viewModel в @Composable fun
- объявить в Activity, а затем передать в @Composable fun
- попробовал с Dagger Hilt
Код:
Класс ViewModel
class MyViewModel(private val m_exerciseDa0: M_HomeEx_ExerciseDao) : ViewModel() {
val getJoinedExerciseData: LiveData by lazy {
m_exerciseDa0.getJoinExerciseData(planId)
}
private val planId: Int = 55
}
Класс данных
data class M_HomeEx_Exercise(
val PlanId: String,
val DayId: String,
val ExId: String,
val ExTime: String,...
Интерфейс комнаты Дао
@Dao
interface M_HomeEx_ExerciseDao {
companion object {
const val SELECT_PART = "SELECT DX.${CommonObjects.DayExId}, DX.${CommonObjects.PlanId}, DX.${CommonObjects.DayId},......
@Query(SELECT_PART)
fun getJoinExerciseData(strPlanId: Int): LiveData
}
Я пытался получить модель представления двумя способами
Try1:
import androidx.lifecycle.viewmodel.compose.viewModel
@Composable
fun ExerciseListScreen(
navController: NavHostController,
homePlanData: Array,
) {
val viewModel:MyViewModel = viewModel()
}
Try2:
Объявлено в MainActivity.kt ->(pass) @Composable Mainscreen.kt -> pass @Composable Practice.kt
MainActivtiy.kt
class MainActivity : ComponentActivity() {
private val viewModel: MyViewModel by viewModels()
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState){
........
composable(HOME_SCREEN)
{
HomeScreen(viewModel)
}
HomeScreen.kt
@Composable
fun HomeScreen(viewModel: MyViewModel) {
.....
ExerciseListScreen(navController, exerciseListData,viewModel)
}
Подробнее здесь: https://stackoverflow.com/questions/784 ... yviewmodel
Мобильная версия