Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如何从文件室中检索布尔值并以懒散列状态显示它_Android_Kotlin_Android Room_Android Jetpack Compose - Fatal编程技术网

Android 如何从文件室中检索布尔值并以懒散列状态显示它

Android 如何从文件室中检索布尔值并以懒散列状态显示它,android,kotlin,android-room,android-jetpack-compose,Android,Kotlin,Android Room,Android Jetpack Compose,我正在建立这个习惯跟踪器,我面临两个问题:首先,我在片段上创建的数据只有在我重新启动应用程序后才会显示,为什么会发生这种情况 还有,我有3张桌子,日期,习惯,日期和习惯。当DatesWithHabits为true时,我使用一个开关在DatesWithHabits上添加一个新行,当为false时将其删除。这一切正常,但当我选择一个不同的日期时,它不会加载它所处的状态,即使它在表上。当我点击日期并将其显示在表上时,如何使其显示为打开 希望我能说清楚。下面是我的代码 @Dao interface Us

我正在建立这个习惯跟踪器,我面临两个问题:首先,我在片段上创建的数据只有在我重新启动应用程序后才会显示,为什么会发生这种情况

还有,我有3张桌子,日期,习惯,日期和习惯。当DatesWithHabits为true时,我使用一个开关在DatesWithHabits上添加一个新行,当为false时将其删除。这一切正常,但当我选择一个不同的日期时,它不会加载它所处的状态,即使它在表上。当我点击日期并将其显示在表上时,如何使其显示为打开

希望我能说清楚。下面是我的代码

@Dao
interface UserDao {

    @Transaction
    @Query("SELECT * FROM date")
    suspend fun getAllDates(): List<CalDate> 

    @Transaction
    @Query("SELECT * FROM date WHERE date = :date")
    suspend fun getDateWithHabits(date: String): List<DatesWithHabits>

    @Insert(onConflict = OnConflictStrategy.REPLACE)
    suspend fun insertHabitWithDate(crossRef: DatesHabitsCrossRef)
视图模型

@HiltViewModel
class UserViewModel @Inject constructor(
    private val repository: MainRepository
) : ViewModel() {

    val calDateList: MutableState<List<CalDate>> = mutableStateOf(listOf())

 init {
        getAllDates()
    }

      viewModelScope.launch() {
            try {
                val result: List<CalDate> = repository.getAllDates()
                calDateList.value = result
            } catch (e: Exception) {
                Log.e("SSS", "${e.message.toString()}; ${e.stackTrace}")
            }
        }
    }

  val datesWithHabits : MutableState<List<DatesWithHabits>> = mutableStateOf(listOf())

    fun getDatesWithHabits(date: String){
        viewModelScope.launch {
            datesWithHabits.value = repository.getDatesWithHabits(date)

        }
    }

    fun insertHabitWithDate(crossRef: DatesHabitsCrossRef){
        viewModelScope.launch {
            repository.insertHabitWithDate(crossRef)
        }
    }
@HiltViewModel
类UserViewModel@Inject构造函数(
专用val存储库:MainRepository
):ViewModel(){
val calDateList:MutableState=mutableStateOf(listOf())
初始化{
getAllDates()
}
viewModelScope.launch(){
试一试{
val结果:List=repository.getAllDates()
calDateList.value=结果
}捕获(e:例外){
Log.e(“SSS”,“${e.message.toString()};${e.stackTrace}”)
}
}
}
val datesWithHabits:MutableState=mutableStateOf(listOf())
趣味getDatesWithHabits(日期:字符串){
viewModelScope.launch{
datesWithHabits.value=repository.getDatesWithHabits(日期)
}
}
fun insertHabitWithDate(交叉引用:DateShabitCrossRef){
viewModelScope.launch{
repository.insertHabitWithDate(crossRef)
}
}
那碎片呢

@AndroidEntryPoint
class CalendarListFragment : Fragment() {

    private val viewModel: UserViewModel by viewModels()

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

                val datesWithHabits = viewModel.datesWithHabits.value

                val dateList = viewModel.calDateList.value

               Column(Modifier.padding(8.dp)) {
                            LazyRow(modifier = Modifier.padding(vertical = 8.dp)) {
                                items(items = dateList) { date ->
                                    DateCard(
                                        date = date,
                                        onClick = { dateSelected.value = date.date.toString()
                                            viewModel.getDatesWithHabits(date.date)

                                    )
                                }
                             }
                               LazyColumn(Modifier.padding(8.dp)) {
                                    items(items = habitList) { habit ->
                                        HabitCard(
                                            habit = habit,
                                            viewModel,
                                            dateSelected.value,
                                            datesWithHabits
                                        )
                                    }
                                }

@Composable
fun HabitCard(
    habit: Habit,
    viewModel: UserViewModel,
    calDate: String,
    datesHabit: List<DatesWithHabits>
) {
    Card {

            Row {
                Text(text = habit.habit)
                HabitSwitch(viewModel, habit.habit, calDate, datesHabit)
            }
    }
}

@Composable
fun DateCard(
    date: CalDate,
    onClick: () -> Unit
) {
    Card{
        Column {

            Text(
               text = date.week,
            )
            Text(
                text = date.date,
            )
        }
    }
}

@Composable
fun HabitSwitch(
    viewModel: UserViewModel,
    habit: String,
    calDate: String,
    dateHabit: List<DatesWithHabits>
) {

    var state = remember { mutableStateOf(false) }

    Switch(
        checked = state.value,
        onCheckedChange = {
            state.value = it
                if (it) {
                    viewModel.insertHabitWithDate(DatesHabitsCrossRef(calDate, habit))
                } else {
                    viewModel.deleteHabitWithDate(DatesHabitsCrossRef(calDate, habit))
                }
        }
    )
}
@AndroidEntryPoint
类CalendarListFragment:Fragment(){
private val viewModel:UserViewModel by viewModels()
@RequiresApi(Build.VERSION\u code.O)
覆盖创建视图(
充气器:布局充气器,容器:视图组?,
savedInstanceState:捆绑?
):查看{
返回ComposeView(requireContext())。应用{
设置内容{
val dateswithhobits=viewModel.dateswithhobits.value
val dateList=viewModel.calDateList.value
列(修饰符填充(8.dp)){
懒散的人(修饰符=修饰符.填充(垂直=8.dp)){
项目(项目=日期列表){date->
日期卡(
日期=日期,
onClick={dateSelected.value=date.date.toString()
viewModel.getDatesWithHabits(date.date)
)
}
}
LazyColumn(修饰符填充(8.dp)){
项目(项目=习惯列表){习惯->
习惯卡(
习惯,
视图模型,
dateSelected.value,
约会习惯
)
}
}
@组合的
娱乐习惯卡(
习惯:习惯,
viewModel:UserViewModel,
calDate:String,
日期:列表
) {
卡片{
划船{
文本(文本=习惯。习惯)
HabitSwitch(viewModel、habit.habit、calDate、datesHabit)
}
}
}
@组合的
趣味约会卡(
日期:CalDate,
onClick:()->单位
) {
卡片{
纵队{
正文(
text=date.week,
)
正文(
text=date.date,
)
}
}
}
@组合的
趣味习惯开关(
viewModel:UserViewModel,
习惯:绳子,
calDate:String,
日期习惯:列表
) {
var state=记住{mutableStateOf(false)}
开关(
选中=state.value,
onCheckedChange={
state.value=it
如果(它){
viewModel.insertHabitWithDate(DateShabitCrossRef(calDate,习惯))
}否则{
viewModel.deleteHabitWithDate(DateShabitCrossRef(calDate,习惯))
}
}
)
}
@AndroidEntryPoint
class CalendarListFragment : Fragment() {

    private val viewModel: UserViewModel by viewModels()

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

                val datesWithHabits = viewModel.datesWithHabits.value

                val dateList = viewModel.calDateList.value

               Column(Modifier.padding(8.dp)) {
                            LazyRow(modifier = Modifier.padding(vertical = 8.dp)) {
                                items(items = dateList) { date ->
                                    DateCard(
                                        date = date,
                                        onClick = { dateSelected.value = date.date.toString()
                                            viewModel.getDatesWithHabits(date.date)

                                    )
                                }
                             }
                               LazyColumn(Modifier.padding(8.dp)) {
                                    items(items = habitList) { habit ->
                                        HabitCard(
                                            habit = habit,
                                            viewModel,
                                            dateSelected.value,
                                            datesWithHabits
                                        )
                                    }
                                }

@Composable
fun HabitCard(
    habit: Habit,
    viewModel: UserViewModel,
    calDate: String,
    datesHabit: List<DatesWithHabits>
) {
    Card {

            Row {
                Text(text = habit.habit)
                HabitSwitch(viewModel, habit.habit, calDate, datesHabit)
            }
    }
}

@Composable
fun DateCard(
    date: CalDate,
    onClick: () -> Unit
) {
    Card{
        Column {

            Text(
               text = date.week,
            )
            Text(
                text = date.date,
            )
        }
    }
}

@Composable
fun HabitSwitch(
    viewModel: UserViewModel,
    habit: String,
    calDate: String,
    dateHabit: List<DatesWithHabits>
) {

    var state = remember { mutableStateOf(false) }

    Switch(
        checked = state.value,
        onCheckedChange = {
            state.value = it
                if (it) {
                    viewModel.insertHabitWithDate(DatesHabitsCrossRef(calDate, habit))
                } else {
                    viewModel.deleteHabitWithDate(DatesHabitsCrossRef(calDate, habit))
                }
        }
    )
}