Java setOnCheckedChangeListener在onCreateView之外
我是Java新手,不知道如何用谷歌搜索 我想做的是将Java setOnCheckedChangeListener在onCreateView之外,java,android,object,Java,Android,Object,我是Java新手,不知道如何用谷歌搜索 我想做的是将setOnCheckedChangeListener外包到SleepTimeReminderFragment类中它自己的函数中,这样它就不在onCreateView函数中,而使用通常的新的开关,通过尝试我认为应该如何工作,但这给了我错误。那么这到底是可能的还是我做错了什么?错误在于@override,因为它表明我无法在那里执行此操作。见第1)、2)和3)条 如果不想使用匿名内部类,则必须使用非匿名类,这意味着必须有一个名称(在我的示例中MyLi
setOnCheckedChangeListener
外包到SleepTimeReminderFragment
类中它自己的函数中,这样它就不在onCreateView
函数中,而使用通常的新的开关,通过尝试我认为应该如何工作,但这给了我错误。那么这到底是可能的还是我做错了什么?错误在于@override
,因为它表明我无法在那里执行此操作。见第1)、2)和3)条
如果不想使用匿名内部类,则必须使用非匿名类,这意味着必须有一个名称(在我的示例中MyListener
)
您还必须在某个时候创建一个新的实例(我在构造函数中这样做了,但它可以在使用之前的任何地方)
例如:
public class SleepTimeReminderFragment extends Fragment {
Switch.OnCheckedChangeListener swEnSleepTimeReminderModOCCL;
public SleepTimeReminderFragment() {
swEnSleepTimeReminderModOCCL = new MyListener();
}
//omitted onCreate
private class MyListener implements Switch.OnCheckedChangeListener {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if (isChecked) {
// set all view items but this switch to enabled
} else {
// set all view items but this switch to not enabled
}
}
}
}
旁注:如果您使用的是Java8,那么只需将方法引用传递给setOnCheckedChangeListener即可。在这篇文章发表时,android只有实验性的Java 8支持。要“外包”Switch的侦听器函数,您的类需要实现CompoundButton.OnCheckedChangeListener
接口并重写方法onCheckedChanged()
谢谢,这很好用,只需返回swEnSleepTimeReminderModOCCL代码>必须删除。
public class SleepTimeReminderFragment extends Fragment {
Switch.OnCheckedChangeListener swEnSleepTimeReminderModOCCL;
public SleepTimeReminderFragment() {
swEnSleepTimeReminderModOCCL = new MyListener();
}
//omitted onCreate
private class MyListener implements Switch.OnCheckedChangeListener {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if (isChecked) {
// set all view items but this switch to enabled
} else {
// set all view items but this switch to not enabled
}
}
}
}
public class SleepTimeReminderFragment extends Fragment
implements CompoundButton.OnCheckedChangeListener{ //implement interface here
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
//do your stuff here
swEnSleepTimeReminderMod.setOnCheckedChangedListener(SleepTimeReminderFragment.this);
}
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if (isChecked) {
// set all view items but this switch to enabled
} else {
// set all view items but this switch to not enabled
}
}
}