2017-09-04 11 views
0

ユーザーが設定の切り替えを切り替えた後に通知するようにします。設定ページは静的なので、ここではshowNotification()を使用することはできません。そのような通知を作成する方法はありますか?static androidのshowNotification()

+0

あなたはshowNotificationのコードを追加していません。また、logcatを添付してください。 – jonathanrz

+0

showNotificationは単なる通知です。問題は、最初のshowNotificationに赤い下線が引かれており、非静的であり、参照できないことです。 –

答えて

3
public static class MainPreferenceFragment extends PreferenceFragment { 
      @Override 
      public void onCreate(final Bundle savedInstanceState) { 
       super.onCreate(savedInstanceState); 
       addPreferencesFromResource(R.xml.pref_main); 

       final SwitchPreference notiswitch = (SwitchPreference) findPreference(getString(R.string.settings_notification_key)); 
       notiswitch.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() { 
        @Override 
        public boolean onPreferenceChange(Preference preference, Object newValue) { 
         if(!((Boolean) newValue)) {  //default false 
          Toast.makeText(getActivity(), "OFF", 
            Toast.LENGTH_SHORT).show(); 

         } else { 
          Toast.makeText(getActivity(), "ON", 
            Toast.LENGTH_SHORT).show(); 
          //TODO make notification 
          showNotification();//error here 

         } 
         return true; 
        } 
       }); 
      } 
} 

public void showNotification() { 

もしshowNotification()方法を含み、断片のためのホストとして機能する活性クラス内の静的内部クラスとしてMainPreferenceFragmentしたように見えます。

伝えたいのは、従来の手法のactivity-fragmentの通信を使用することです。これは、キャスティングフラグメントのホスティングアクティビティを使用して、必要なインターフェイスに適切なメソッドを呼び出すことです。例えば

:インタフェースを実装するフラグメントを示すための責任活動を行い、showNotificationメソッドをオーバーライドその後

public interface NotificationView{ 
    void showNotification(); 
} 

は別のファイルに新しいインターフェイスを作成します。その後

MainPreferenceFragmentクラスにプライベートフィールドNotificationView callback;を追加し、この方法でそれを初期化します。

@Override 
public void onAttach(Activity activity) { 
    super.onAttach(activity); 
    if (activity instanceOf NotificationView){ 
     callback = (NotificationView) activity; 
    } 
} 

そして今、あなたはあなたのフラグメント内の必要な場所からcallback.showNotification();を呼び出すことができます。ただし、他のアクティビティでフラグメントを使用する場合は、コールバックをnullにチェックすることを忘れないでください。

希望すると助かります!

+0

先生、私は今成功しようとしていると思いますが、callback.showNotification();コールバックが初期化されていない可能性があります。 –

+0

NotificationViewインターフェイス –

+0

を実装しているアクティビティにフラグメントを追加していることを確認してください。コールバックが初期化されていません。 –