Это мой fragment_setting.xml
.
<ToggleButton
android:layout_width="47dp"
android:layout_height="27dp"
android:background="@{settingVm.isNotiOn ? @drawable/btn_on_mid : @drawable/btn_off_mid}"
android:onClick="@{()->settingVm.changeBtnStatus()}"
android:text="@string/on"
android:textOff="on"
android:textOn="on"
android:textSize="11sp"
android:textStyle="bold" />
<ToggleButton
android:layout_width="47dp"
android:layout_height="27dp"
android:background="@{settingVm.isNotiOn ? @drawable/btn_off_mid : @drawable/btn_on_mid}"
android:onClick="@{()-> settingVm.changeBtnStatus()}"
android:text="@string/off"
android:textOff="off"
android:textOn="off"
android:textSize="11sp"
android:textStyle="bold" />
Это мой SettingViewModel
class SettingViewModel(handler: SettingHandler) : ViewModel() {
var handler = handler
var isNotiOn: Boolean? = true
var visibility = View.VISIBLE
init {
if (BuildConfig.DEBUG) {
Timber.plant(Timber.DebugTree())
Timber.d("start")
}
}
fun onBackBtnPressed() {
Timber.d("onBackBtnPressed()")
handler.onBackBtnPressed()
}
fun showLogoutDialogue() {
Timber.d("showLogoutDialogue()")
handler.showLogoutDialogue()
}
fun changeBtnStatus(){
Timber.d("changeBtnStatus()")
handler.changeBtnStatus()
}
}
А это мой SettingFragment
...
val spUtil = SharedPreferenceUtil(activity!!)
when (spUtil.isNotificationOn) {
false -> {
binding!!.settingVm!!.isNotiOn = false
}
else -> {
binding!!.settingVm!!.isNotiOn = true
}
}
...
override fun changeBtnStatus() {
// TODO: Set real notification setting.
val spUtil = SharedPreferenceUtil(activity!!)
when (binding!!.settingVm!!.isNotiOn) {
true -> {
binding!!.settingVm!!.isNotiOn = false
spUtil.isNotificationOn = false
}
else -> {
binding!!.settingVm!!.isNotiOn = true
spUtil.isNotificationOn = true
}
}
}
В чем проблема???Я не использую двустороннюю привязку и троичный оператор, такой как @={}
.Но я считаю, что я должен использовать двухстороннее связывание, потому что оно не является постоянным значением.И у меня есть два изображения правильно.
Кто-то говорит, что я не должен использовать префикс is
, потому что он может генерировать getter
и setter
.Итак, я даже попытался удалить его и определить префикс has
или просто NotiOn
, но не сработал.