我是Java的新手,我不知道如何谷歌这个。
我想要做的是将setOnCheckedChangeListener
“外包”到SleepTimeReminderFragment
类中它自己的函数,这样它就不在onCreateView
函数中,而是使用通常的新{{1}而是在它本身,就像我试图表明我的意思,通过尝试我认为这应该如何工作,但这给了我错误。这一切都是可能的,还是我做错了什么?错误与Switch.OnCheckedChangeListener
有关,因为它表明我不能那样做。见### 1),2)和3)。
@override
答案 0 :(得分:0)
如果您不想要使用匿名内部类,则必须使用非匿名类,这意味着它必须具有名称(在我的示例中为MyListener
)。
您还必须在某个时刻创建new
实例(我在构造函数中执行了此操作,但它可以在使用之前的任何位置)。
示例:
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
}
}
}
}
旁注:如果您使用的是Java 8,则可以将方法引用传递给setOnCheckedChangeListener。在这篇文章发布时,android只支持Java 8实验。
答案 1 :(得分:0)
要“外包”Switch
的侦听器功能,您的类需要实现CompoundButton.OnCheckedChangeListener
接口并覆盖方法onCheckedChanged()
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
}
}
}