Java setOnCheckedChangeListener在onCreateView之外

Java setOnCheckedChangeListener在onCreateView之外,java,android,object,Java,Android,Object,我是Java新手,不知道如何用谷歌搜索 我想做的是将setOnCheckedChangeListener外包到SleepTimeReminderFragment类中它自己的函数中,这样它就不在onCreateView函数中,而使用通常的新的开关,通过尝试我认为应该如何工作,但这给了我错误。那么这到底是可能的还是我做错了什么?错误在于@override,因为它表明我无法在那里执行此操作。见第1)、2)和3)条 如果不想使用匿名内部类,则必须使用非匿名类,这意味着必须有一个名称(在我的示例中MyLi

我是Java新手,不知道如何用谷歌搜索

我想做的是将
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
        }
    }
}