onCreateView之外的setOnCheckedChangeListener

时间:2016-03-21 01:48:16

标签: java android object

我是Java的新手,我不知道如何谷歌这个。

我想要做的是将setOnCheckedChangeListener“外包”到SleepTimeReminderFragment类中它自己的函数,这样它就不在onCreateView函数中,而是使用通常的新{{1}而是在它本身,就像我试图表明我的意思,通过尝试我认为这应该如何工作,但这给了我错误。这一切都是可能的,还是我做错了什么?错误与Switch.OnCheckedChangeListener有关,因为它表明我不能那样做。见### 1),2)和3)。

@override

2 个答案:

答案 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
        }
    }
}