NavigationView SwitchCompat 按钮只有在被选中时才有效
NavigationView SwitchCompat button only works when it is selected
在我的代码中,我有一个位于 NavigationView
中的 SwitchCompat
按钮,它应该在 SharedPreferences
中存储一些值。该按钮有效,但为了使其正常工作,必须首先选择它,即。您必须先单击按钮的文本,然后再单击开关本身。我找不到发生这种情况的原因。我的代码如下所示:
**MainActivity.kt**
class MainActivity : AppCompatActivity(), NavigationView.OnNavigationItemSelectedListener {
... // onCreate(), etc
override fun onNavigationItemSelected(item: MenuItem): Boolean {
when (item.itemId) {
R.id.srch_view -> Toast.makeText(applicationContext, "First", Toast.LENGTH_SHORT).show()
R.id.switch_lay -> saveValues()
}
drawer_layout.closeDrawer(GravityCompat.START)
return true
}
...// rest of code
fun saveValues() {
val btn = navView.findViewById<NavigationView>(R.id.navView)
val compoundBtn: SwitchCompat = btn.findViewById(R.id.switch_btn)
prefs = getPreferences(Context.MODE_PRIVATE)
editor = prefs.edit()
mDarkTheme = prefs.getBoolean("isChecked", false)
compoundBtn.setOnCheckedChangeListener { _, isChecked ->
if (isChecked) {
// The toggle is enabled
editor.putBoolean("isChecked", true)
editor.apply()
Log.e("PREFS ", "SAVED ")
} else {
// The toggle is disabled
editor.putBoolean("isChecked", false)
editor.apply()
Log.e("PREFS ", "NOT SAVED ")
}
}
}
...
}
注意:该按钮可以工作,唯一的问题是必须选中它才能正常工作。有人帮忙就好了
好吧,我终于明白这是怎么回事了。我在单独的 .xml 中将 SwitchCompat 声明为 CompoundButton
,它位于 ConstraintLayout
内。我删除了 ConstraintLayout
并将按钮的布局切换为 MenuItem
。
最后,它看起来像这样:
MainActivity.kt
...
var mSwitchBtn: CompoundButton
var mSwitchItem: MenuItem
var mNavView: NavigationView
...
mSwitchItem= mNavView.menu.findItem(R.id.switch_theme)
mSwitchBtn= mSwitchItem.actionView as CompoundButton
mToggleAnim.setOnCheckedChangeListener { buttonView, isChecked ->
// Rest of code
}
在我的代码中,我有一个位于 NavigationView
中的 SwitchCompat
按钮,它应该在 SharedPreferences
中存储一些值。该按钮有效,但为了使其正常工作,必须首先选择它,即。您必须先单击按钮的文本,然后再单击开关本身。我找不到发生这种情况的原因。我的代码如下所示:
**MainActivity.kt**
class MainActivity : AppCompatActivity(), NavigationView.OnNavigationItemSelectedListener {
... // onCreate(), etc
override fun onNavigationItemSelected(item: MenuItem): Boolean {
when (item.itemId) {
R.id.srch_view -> Toast.makeText(applicationContext, "First", Toast.LENGTH_SHORT).show()
R.id.switch_lay -> saveValues()
}
drawer_layout.closeDrawer(GravityCompat.START)
return true
}
...// rest of code
fun saveValues() {
val btn = navView.findViewById<NavigationView>(R.id.navView)
val compoundBtn: SwitchCompat = btn.findViewById(R.id.switch_btn)
prefs = getPreferences(Context.MODE_PRIVATE)
editor = prefs.edit()
mDarkTheme = prefs.getBoolean("isChecked", false)
compoundBtn.setOnCheckedChangeListener { _, isChecked ->
if (isChecked) {
// The toggle is enabled
editor.putBoolean("isChecked", true)
editor.apply()
Log.e("PREFS ", "SAVED ")
} else {
// The toggle is disabled
editor.putBoolean("isChecked", false)
editor.apply()
Log.e("PREFS ", "NOT SAVED ")
}
}
}
...
}
注意:该按钮可以工作,唯一的问题是必须选中它才能正常工作。有人帮忙就好了
好吧,我终于明白这是怎么回事了。我在单独的 .xml 中将 SwitchCompat 声明为 CompoundButton
,它位于 ConstraintLayout
内。我删除了 ConstraintLayout
并将按钮的布局切换为 MenuItem
。
最后,它看起来像这样:
MainActivity.kt
...
var mSwitchBtn: CompoundButton
var mSwitchItem: MenuItem
var mNavView: NavigationView
...
mSwitchItem= mNavView.menu.findItem(R.id.switch_theme)
mSwitchBtn= mSwitchItem.actionView as CompoundButton
mToggleAnim.setOnCheckedChangeListener { buttonView, isChecked ->
// Rest of code
}