2016-03-21 3 views
0

私はJavaを使い慣れていないので、私はこの方法を知りません。onCreateViewの外にあるsetOnCheckedChangeListener

それはいつも新しいSwitch.OnCheckedChangeListeneronCreateView関数の内部ではなく、それ自身ではないように、私はどのように私を示すためにしようとしたように私は何をしたいが、SleepTimeReminderFragmentクラスでは独自の関数にsetOnCheckedChangeListenerを「アウトソーシング」されます私はこれがうまくいくと思う方法を試みることによってこれを意味するが、それは私にエラーを与える。これはすべて可能であるか、私はちょうど何か間違ったことをしましたか?エラーは@overrideで、私はそこでそれを行うことはできないと述べています。 ### at 1)、2)および3)を参照してください。

public class SleepTimeReminderFragment extends Fragment { 

    // ### This 1) 
    Switch.OnCheckedChangeListener swEnSleepTimeReminderModOCCL; 

    public SleepTimeReminderFragment() { 
     // Required empty public constructor 
    } 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
          Bundle savedInstanceState) { 
     View view = inflater.inflate(R.layout.fragment_sleep_time_reminder, container, false); 

     Switch swEnSleepTimeReminderMod = (Switch) view.findViewById(R.id.swEnSleepTimeReminderMod); 
     swEnSleepTimeReminderMod.setOnCheckedChangeListener(swEnSleepTimeReminderModOCCL); 

     // ### function that I want to "outsource" 2) 
     /*swEnSleepTimeReminderMod.setOnCheckedChangeListener(new 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 
       } 
      } 
     });*/ 

     // Inflate the layout for this fragment 
     return view; 
    } 

    // ### what I guessed this "outsourcing" would have to look like 3) 
    private Switch.OnCheckedChangeListener getSwEnSleepTimeReminderModOCCL() { 
     @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 
      } 
     } 
     return swEnSleepTimeReminderModOCCL; 
    } 
} 

答えて

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へのメソッドの参照を渡すことができます。この投稿の時点でアンドロイドは実験的なJava 8のサポートしか持っていません。 `削除する必要があります。Switchための「アウトソース」リスナー関数をするには

+0

がちょうど' swEnSleepTimeReminderModOCCLを返し、これは正常に動作します、ありがとうCompoundButton.OnCheckedChangeListenerインタフェースを実装し、メソッドをオーバーライドする必要があります。 – Andimanos

+0

私はそれを編集しました。 – F43nd1r

0

、あなたのクラスは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 
     } 
    } 
} 
+0

この解決法も機能します、ありがとうございます。 – Andimanos

関連する問題